首页 > 数据库 >mysql 配置主从复制

mysql 配置主从复制

时间:2023-07-03 14:12:36浏览次数:43  
标签:opt 主从复制 slave log 配置 master mysql docker

推荐编译安装,但是太麻烦了,所以直接 docker 安装。

参考

https://blog.csdn.net/abcde123_123/article/details/106244181
https://www.cnblogs.com/songwenjie/p/9371422.html

拉取镜像

推荐使用 mysql 5.7

docker pull mysql:5.7.39

启动两个服务

https://zhuanlan.zhihu.com/p/342836513

创建数据目录

# 主库
mkdir -p /opt/mysql-master/log
mkdir -p /opt/mysql-master/conf
mkdir -p /opt/mysql-master/data
# 从库
mkdir -p /opt/mysql-slave/log
mkdir -p /opt/mysql-slave/conf
mkdir -p /opt/mysql-slave/data

先启动主库

先拷贝一份mysql文件

# 启动临时的mysql服务
docker run -d \
> -p 3306:3306 \
> --name mysql \
> -e MYSQL_ROOT_PASSWORD=123  \
> mysql:5.7
# 复制配置文件和目录
docker cp mysql:/etc/my.cnf /opt/mysql-master
docker cp mysql:/etc/mysql/conf.d /opt/mysql-master/conf
docker cp mysql:/etc/mysql/mysql.conf.d /opt/mysql-master/conf
# 删除服务
docker stop mysql && docker rm mysql

启动

docker run -p 3307:3306 --name mysql-master \
-v /opt/mysql-master/log:/var/log/mysql \
-v /opt/mysql-master/data:/var/lib/mysql \
-v /opt/mysql-master/my.cnf:/etc/my.cnf \
-v /opt/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=ding123456789 \
-e TZ=Asia/Shanghai \
-d mysql:5.7.39

开放外网访问

docker exec -it mysql-master /bin/bash
# 登录mysql
mysql -uroot -pding123456789
# 授权
grant all privileges on *.* to 'root'@'%' WITH GRANT OPTION;

# 刷新权限
flush privileges;
# 退出mysql会话
quit

# 退出容器
exit


安装从库

# 复制一份mysql配置文件,参考master
懒的话,直接copy master
cp -r /opt/mysql-master /opt/mysql-slave
# 启动容器
docker run -p 3308:3306 --name mysql-slave \
-v /opt/mysql-slave/log:/var/log/mysql \
-v /opt/mysql-slave/data:/var/lib/mysql \
-v /opt/mysql-slave/my.cnf:/etc/my.cnf \
-v /opt/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=ding123456789 \
-d mysql:5.7.39

开启访问

docker exec -it mysql-slave /bin/bash
# 登录mysql
mysql -uroot -pding123456789
# 授权
grant all privileges on *.* to 'root'@'%' WITH GRANT OPTION;

# 刷新权限
flush privileges;
# 退出mysql会话
quit

# 退出容器
exit

修改uuid

https://zhuanlan.zhihu.com/p/375776925
https://blog.csdn.net/t1anyuan/article/details/78117672
https://cloud.tencent.com/developer/article/2027898
每个mysql 实例的uuid相同导致复制报错。
因为用的都是同一个镜像,所以 mysql 实例的uuid 相同需要手动修改

生成uuid

select uuid();
37421595-3594-11ed-bb5b-0242ac110003

修改主库的uuid
vi /opt/mysql-master/data/auto.cnf

[auto]
server-uuid=37421595-3594-11ed-bb5b-0242ac110003

重启主库
docker restart mysql-master

配置

编辑主库的配置文件 my.cnf
添加下面配置

[mysqld]
server-id=1
# 开启日志
log-bin=master-bin
binlog-format=ROW
# 指定数据库
binlog-do-db=sense
# 时区
default-time-zone='+08:00'

重启主库

创建用户,用于数据同步

CREATE USER 'slave'@'%' IDENTIFIED BY 'ding123456789';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

重启容器
docker restart mysql-master

配置从库
设置配置问 my.cnf

[mysqld]
server-id=2
##  备库日志
log-bin=mysql-slave-bin   
## 中继日志
relay_log=edu-mysql-relay-bin
# 只读权限
read_only=1
# 时区
default-time-zone='+08:00'

重启从库

开启主从复制

# 进入主库
# 登录 mysql

# 查看主库状态
show master status;

image.png
file master-bin.000001, position 769
记住File和Position,后面需要用到。此时一定不要操作Master库,否则将会引起Master状态的变化,File和Position字段也将会进行变化。

进入从库,打开mysql 会话
修改主库同步信息

change master to master_host='172.17.0.1', master_user='slave', master_password='ding123456789', master_port=3307, master_log_file='master-bin.000003', master_log_pos=154, master_connect_retry=30;

开启同步
start slave;

查看同步状态
show slave status \G;

看到如下两项都为yes 同步成功
Slave_IO_Running:YES
Slave_SQL_Running:YES

扩展

设置时区

https://blog.csdn.net/jia_gushuai/article/details/105601423
https://cloud.tencent.com/developer/article/1913544

my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

如果修改主库后,需要刷新日志才能看到当前的日志位置

flush logs;

Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file n

从库配置参数有误,日志位置写错了

https://blog.csdn.net/u011488009/article/details/104608760
https://blog.csdn.net/lihuarongaini/article/details/101299375
https://developer.aliyun.com/article/27685

标签:opt,主从复制,slave,log,配置,master,mysql,docker
From: https://www.cnblogs.com/dingjiaqi/p/17522744.html

相关文章

  • MySQL数据迁移
    前言在进行迁移时,源mysql的配置和目标mysql的配置应尽量保持一致迁移所有数据库迁移前,源端有以下数据库:迁移前,目标端有以下数据库目标端是刚安装好的mysql,默认就有上图中的4个库,源端比目标端多了一个dan库在源端备份所有数据库[root@target_pcdatabasefile]# mysql......
  • Mysql基础篇(四)之事务
    一.事务简介事务是一组操作的集合,它是一个不可分隔的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。就比如:张三给李四转账1000块钱,张三银行账户的钱减少了1000,而李四银行账户的钱要增加1000。这一组操作就必须在一......
  • 嵌入式Linux配置网络
    交流群一:QQ群:869222007(鸿蒙开发/Linux/嵌入式/驱动/资料下载)交流群二:QQ群:536785813(单片机-嵌入式)公 众 号:百问科技版本日期作者说明V12020韦东山技术文档2.2.4配置网络重点来了,以前我们在VMware中使用桥接,这需要保证Windows、Ubuntu、开发板三者互通,而很多人的电脑有多个网卡......
  • Linux系统驱动之编程_配置LCD控制器_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置LCD控制器_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULL......
  • Linux系统驱动之编程_配置引脚_基于IMX6ULL
    资料下载coding无法使用浏览器打开,必须用git工具下载:gitclonehttps://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git视频观看百问网驱动大全编程_配置引脚_基于IMX6ULL参考资料,GIT仓库里:芯片资料IMX6ULL\开发板配套资料\datasheet\Core_board\CPU\IMX6ULLRM.pd......
  • Git生成ssh密钥及配置
    由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以必须要让github仓库认证你SSHkey,在此之前,必须要生成SSHkey。第1步:创建SSHKey。在windows下查看[c盘->用户->自己的用户名->.ssh下是否有id_rsa、id_rsa.pub文件,如果没有需要手动生成。在开始菜单中打开git下的gitb......
  • Flask SQLAlchemy配置
    FlaskSQLAlchemy配置Flask模型Flask默认并没有提供任何数据库操作的API我们可以选择任何适合自己项目的数据库来使用Flask中可以自己的选择用原生语句实现功能,也可以选择ORM(SQLAlchemy,MongoEngine)原生sQL缺点代码利用率低,条件复杂代码谐句越长,有很多相似语句......
  • Linux下轻松修改MySQL/MariaDB的Root密码
    如果你是第一次安装MySQL或MariaDB,你可以执行mysql_secure_installation 脚本来实现基本的安全设置。其中的一个设置是数据库的root密码——该密码必须保密,并且只在必要的时候使用。如果你需要修改它(例如,当数据库管理员换了人——或者被解雇了!)。修改MySQL或......
  • 网络常用配置和运维命令以及使用方法
    网络常用配置和运维命令以及使用方法原创 Hum0ro 虚拟化时代君 2023-06-2915:09 发表于缅甸收录于合集#网络3个#windows2个#命令1个#运维4个#linux3个哈喽大家好,欢迎来到虚拟化时代君(XNHCYL)。“  大家好,我是虚拟化时代君,一位潜心于互联网的技术宅男。......
  • mysql的表结构导出成word文档
     pararent的pow.xml<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourc......