为了账号安全,请及时绑定邮箱和手机立即绑定

docker mysql 主从配置

标签:
MySQL Docker

最近有公司有需求,需要在两台机器上使用docker的方式部署mysql,并部署成主从的方式。记录一下。

参考文章:

一、环境准备

准备两台机器A,B。
两台机器都是centos7,假设A内网是192.168.1.0,B内网是192.168.1.1。

二、准备主从mysql需要的配置文件

mysql_master.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql#log-error      = /var/log/mysql/error.log# By default we only accept connections from localhostbind-address   = 0.0.0.0port=3307# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0## 设置server_id,一般设置为IP,注意要唯一server_id=100## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)binlog-ignore-db=mysql# 如果备份多个数据库,重复设置这个选项即可binlog-do-db=my_db## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)log-bin=edu-mysql-bin## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M## 主从复制的格式(mixed,statement,row,默认格式是statement)binlog_format=mixed## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致slave_skip_errors=1062

mysql_slave.cnf

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql#log-error      = /var/log/mysql/error.log# By default we only accept connections from localhostbind-address   = 0.0.0.0port=3307# Disabling symbolic-links is recommended to prevent assorted security riskssymbolic-links=0## 设置server_id,一般设置为IP,注意要唯一server_id=101## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)binlog-ignore-db=mysql# 如果备份多个数据库,重复设置这个选项即可binlog-do-db=my_db## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用log-bin=edu-mysql-slave1-bin## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存binlog_cache_size=1M## 主从复制的格式(mixed,statement,row,默认格式是statement)binlog_format=mixed## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。expire_logs_days=7## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致slave_skip_errors=1062## relay_log配置中继日志relay_log=edu-mysql-relay-bin## log_slave_updates表示slave将复制事件写进自己的二进制日志log_slave_updates=1## 防止改变数据(除了特殊的线程)read_only=1

三、配置主mysql

1、安装mysql

拷贝mysql_master.cnf到机器A的/mnt/mysql/mysql_master.cnf,执行下列命令:

sudo docker run --net host  --name mymysql -v /mnt/mysql:/var/lib/mysql -v /mnt/mysql/mysql_master.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=password   --restart always -d mysql

2、配置

# 连接mysqldocker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3307 -uroot -ppassword'# 执行下列sqlcreate database my_db;
CREATE USER 'slave'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 
show master status;

执行show master status; 以后要记住File、Position两个参数,在配置从mysql的时候会用到。


mysql_slave.png

四、配置从mysql

1、安装mysql

拷贝mysql_slave.cnf到机器B的/mnt/mysql/mysql_slave.cnf,执行下列命令:

sudo docker run --net host  --name mymysql -v /mnt/mysql:/var/lib/mysql -v /mnt/mysql/mysql_slave.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=password   --restart always -d mysql

2、配置

# 连接mysqldocker run -it --net host  --rm mysql sh -c 'exec mysql -h "127.0.0.1" -P 3307 -uroot -ppassword'# 执行下列sqlcreate database my_db;# master_log_file 对应 File# master_log_pos 对应 Positionchange master to master_host='192.168.1.0', master_user='slave', master_password='password', master_port=3307, master_log_file='edu-mysql-bin.000004', master_log_pos=2611, master_connect_retry=10;  
show slave status;  
start slave;  
show slave status;

五、测试

# 在主mysql创建表并插入数据create table hi_tb(id int(3),name char(10));
insert into hi_tb values(001,'bobu');
# 在从数据库检查可以看到已经有对应的数据show tables;
select * from hi_tb;



作者:xsren
链接:https://www.jianshu.com/p/48928afdd9a1

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消