ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

docker容器部署mysql主从同步之gtid方法

2020-12-27 18:31:39  阅读:316  来源: 互联网

标签:log buffer mysql var docker gtid size


环境

centos
192.168.1.10  (master)
192.168.1.11 (slave)

主( master)

划分存储卷

lvcreate -L 200G -name lvdata vgdata
mkfs.xfs /dev/mapper/vgdata-lvmysql
mkdir /mysql
vim /etc/fstab
/dev/mapper/vgdata-lvmysql   /mysql xfs   defaults 0 0
mount -a

初始化mysql主节点配置

$ docker pull local.harbor.io/library/mysql:5.7.22
$ mkdir /mysql/data /mysql/log /mysql/config  #创建日志、配置文件、数据持久存储目录
$ docker run -tid --restart=always --net=host -e MYSQL_ROOT_PASSWORD=123456 --name mysql-test mysql:5.7.22  #启动测试容器将默认文件拷贝
$ docker cp mysql-test:/var/log/mysql /mysql/log
$ docker cp mysql-test:/var/lib/mysql /mysql/data
$ docker cp mysql-test:/etc/mysql  /mysql/config
$ vim /mysql/config/mysql/my.cnf #设置配置文件参数
[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
 
[mysqld]
gtid_mode=on
enforce_gtid_consistency=1
datadir=/var/lib/mysql
port            = 3306
socket          = /var/lib/mysql/mysql.sock
symbolic-links=0
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
innodb_buffer_pool_size = 2G
log-bin=mysql-bin
binlog_format=mixed
server-id       = 1
 
[mysqld_safe]
log-error=/var/log/mysql/zbx3dbmaster.log
pid-file=/var/lib/mysql/zbx3dbmaster.pid
 
[mysqldump]
quick
max_allowed_packet = 16M
 
[mysql]
no-auto-rehash
 
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
interactive-timeout

启动主节点容器

$ docker run -tid --restart=always --net=host -e MYSQL_ROOT_PASSWORD=123456 -v /mysql/data/mysql:/var/lib/mysql -v /mysql/log/mysql:/var/log/mysql -v /mysql/config/mysql:/etc/mysql --name mysql-master mysql:5.7.22

创建同步用户

docker exec -ti mysql-master mysql -uroot -p123456 -e "grant replication slave on *.* to 'db_sync'@'%' identified by 'abcdefg';"

查看主状态

docker exec -ti mysql-master mysql -uroot -p123456 -e "show master status\G;"
*************************** 1. row ***************************
             File: mysql-bin.000001
         Position: 154
     Binlog_Do_DB: db
 Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec)

从 (slave)

划分存储卷

lvcreate -L 200G -name lvdata vgdata
mkfs.xfs /dev/mapper/vgdata-lvmysql
mkdir /mysql
vim /etc/fstab
/dev/mapper/vgdata-lvmysql   /mysql xfs   defaults 0 0
mount -a

初始化从节点配置

```bash
$ docker pull local.harbor.io/library/mysql:5.7.22
$ mkdir /mysql/data /mysql/log /mysql/config  #创建日志、配置文件、数据持久存储目录
$ docker run -tid --restart=always --net=host -e MYSQL_ROOT_PASSWORD=123456 --name mysql-test mysql:5.7.22  #启动测试容器将默认文件拷贝
$ docker cp mysql-test:/var/log/mysql /mysql/log
$ docker cp mysql-test:/var/lib/mysql /mysql/data
$ docker cp mysql-test:/etc/mysql  /mysql/config
$ vim /mysql/config/mysql/my.cnf #设置配置文件参数
[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
 
[mysqld]
gtid_mode=on
enforce_gtid_consistency=1
datadir=/var/lib/mysql
port            = 3306
socket          = /var/lib/mysql/mysql.sock
symbolic-links=0
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
innodb_buffer_pool_size = 2G
log-bin=mysql-bin
binlog_format=mixed
server-id       = 2
 
[mysqld_safe]
log-error=/var/log/mysql/zbx3dbslave.log
pid-file=/var/lib/mysql/zbx3dbslave.pid
 
[mysqldump]
quick
max_allowed_packet = 16M
 
[mysql]
no-auto-rehash
 
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
 
[mysqlhotcopy]
interactive-timeout

$ docker run -tid --restart=always -p3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /mysql/data/mysql:/var/lib/mysql -v /mysql/log/mysql:/var/log/mysql -v /mysql/config/mysql:/etc/mysql --name mysql-slave mysql:5.7.22

与主同步

$ docker exec -ti mysql-slave1 mysql -uroot -p123456 -e "stop slave;change master to master_host='192.168.211.60',master_user='db_sync',master_password='abcdefg',master_auto_position=1,MASTER_HEARTBEAT_PERIOD=2,MASTER_CONNECT_RETRY=1, MASTER_RETRY_COUNT=86400;set global slave_net_timeout=8;start slave;"

$ docker exec -ti mysql-slave mysql -uroot -p123456 -e "show slave status\G;"

如果报错

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work

原因:uuid值相等
解决方法:修改不一样即可
修改 /mysql/data/mysql/auto.cnf

[auto]
server-uuid=a97c5316-4819-11eb-a312-000c29613c38

标签:log,buffer,mysql,var,docker,gtid,size
来源: https://blog.csdn.net/xixihahalelehehe/article/details/111823926

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有