docker 搭建mysql主从复制

关于主从复制的原理在之前一篇文章里面已经说过了,这里就不过多赘述了,本文主要讲解使用docker的搭建过程。

主从配置需要注意的地方:

  1. 主DB server和从DB server数据库的版本一致
  2. 主DB server和从DB server数据库数据一致
  3. 主DB server开启二进制日志,主DB server和从DB server的server_id都必须唯一

拉取镜像

Percona Server为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提升。该版本提升了在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具;另外有更多的参数和命令来控制服务器行为。

docker pull percona:5.7.23

搭建主库

创建目录

mkdir /data/mysql/master01 -p
cd /data/mysql/master01 
mkdir conf data 
chmod 777 * -R

创建配置文件

cd /data/mysql/master01/conf 
vi my.cnf

主库配置文件my.conf

[mysqld]
#开启主从复制,主库的配置
log-bin = mysql-bin 
#指定主库
server-id=1 
#指定同步的数据库,如果不指定则同步全部数据库 
binlog-do-db=my_test

创建并启动容器

docker run --name percona-master01 --privileged=true -v /data/mysql/master01/data:/var/lib/mysql -v /data/mysql/master01/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qwe123 -d percona:5.7.23 

进入容器

docker exec -it percona-master01 /bin/bash

进入mysql

mysql -h 127.0.0.1 -uroot -pqwe123

创建同步账户以及授权

create user 'sunyuqi'@'%' identified by 'sunyuqi'; 
grant replication slave on *.* to 'sunyuqi'@'%'; 
flush privileges;

查看master状态

show master status;

docker 搭建mysql主从复制_第1张图片
记录file和position

查看二进制日志相关的配置项

show global variables like 'binlog%';

docker 搭建mysql主从复制_第2张图片

查看server相关的配置项

show global variables like 'server%';

docker 搭建mysql主从复制_第3张图片

搭建从库

#创建目录 
mkdir /data/mysql/slave01 -p 
cd /data/mysql/slave01 
mkdir conf data 
chmod 777 * -R
#创建配置文件 
cd /data/mysql/slave01/conf 
vi my.cnf

从库配置文件my.conf

[mysqld] 
#指定serverid,只要不重复即可,从库也只有这一个配置,其他都在SQL语句中操作 
server-id=2

创建并运行容器

docker run --name percona-slave01 --privileged=true -v /data/mysql/slave01/data:/var/lib/mysql -v /data/mysql/slave01/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=qwe123 -d percona:5.7.23 

进入容器

docker exec -it percona-slave01 /bin/bash
mysql -h 127.0.0.1 -uroot -pqwe123
#设置master相关信息 
CHANGE MASTER TO master_host='192.168.130.128', master_user='sunyuqi', master_password='sunyuqi', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=753;
#启动同步 
start slave;
#查看master状态 
show slave status\G

docker 搭建mysql主从复制_第4张图片
可以进行创建数据库、表,插入数据等操作,可以发现实现了主从。

主从复制模式

show global variables like 'binlog%';

docker 搭建mysql主从复制_第5张图片
在查看二进制日志相关参数内容中,会发现默认的模式为ROW,其实在MySQL中提供了有3种模式,基于SQL语句的 复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixedbased replication, MBR)。对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED。

STATEMENT模式(SBR)
每一条会修改数据的sql语句会记录到binlog中。

  • 优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。
  • 缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)

ROW模式(RBR)
不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的 存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。

MIXED模式(MBR)
以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用 ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
建议使用MIXED模式。

修改主库的配置 ,增添

binlog_format=MIXED

重启

docker restart percona-master01

查看二进制日志相关的配置项

show global variables like 'binlog%';

docker 搭建mysql主从复制_第6张图片
可以看到,设置已经生效。并且进行测试,同步功能正常。

你可能感兴趣的:(mysql,docker,数据库,mysql,linux,主从复制,docker)