MySQL自身支持主从复制
可以为MySQL设置启用主从复制功能,会自动将数据进行备份
基于二进制日志
搭建MySQL主从复制
搭建主库
第一步:创建宿主文件夹
mkdir -p /docker/mysqlcluster/mysql3307
编辑配置文件
vim /docker/mysqlcluster/mysql3307/my.cnf
配置文件内容:
[client]
port = 3306
[mysqld]
#设置3306端口
port = 3306
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#唯一 集群中标记每一个MySQL服务
server-id=3307
#二进制日志
log-bin=mysqllogbin
log-bin-index=mysqllogbin.index
#通用日志
general_log=1
log_output=FILE,TABLE
#慢查询日志
slow_query_log=ON
slow_query_log_file=slow.log
long_query_time=2 #超过2秒的sql记录
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
第二步:创建并运行容器
docker run -d --name mysqlmaster -e MYSQL_ROOT_PASSWORD=root --privileged=true -v /docker/mysqlcluster/mysql3307/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -p 3307:3306 mysql:5.7
第三步:连接数据库
docker exec -it mysqlmaster bash
mysql -u root -p
输入密码:root
查看二进制日志启用
show master status;
搭建从库
第一步:创建宿主文件夹
mkdir -p /docker/mysqlcluster/mysql3311
编辑配置文件
vim /docker/mysqlcluster/mysql3311/my.cnf
vim /docker/mysqlcluster/mysql3312/my.cnf
配置文件内容:
[client]
port = 3306
[mysqld]
#设置3306端口
port = 3306
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#唯一 集群中标记每一个MySQL服务
server-id=3311
#二进制日志
log-bin=mysqllogbin
log-bin-index=mysqllogbin.index
#通用日志
general_log=1
log_output=FILE,TABLE
#慢查询日志
slow_query_log=ON
slow_query_log_file=slow.log
long_query_time=2 #超过2秒的sql记录
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
第二步:创建并运行容器
docker run -d --name mysql3311 -e MYSQL_ROOT_PASSWORD=root --privileged=true -v /docker/mysqlcluster/mysql3311/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -p 3311:3306 mysql:5.7
docker run -d --name mysql3312 -e MYSQL_ROOT_PASSWORD=root --privileged=true -v /docker/mysqlcluster/mysql3312/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -p 3312:3306 mysql:5.7
第三步:连接数据库
docker exec -it myslmaster bash
输入密码:root
查看二进制日志启用
show master status;
设置主从
第一步:设置主库
#设置复制用户和密码并授权
docker exec -it mysqlmaster bash
mysql -u root -p
grant replication slave on *.* to 'backup'@'%' identified by 'qfjava';
#刷新权限
flush privileges;
#查看二进制文件和当前索引
show master status;
第二步 获取主库的日志文件和开始位置
mysqllogbin.000003 591
查看主库容器的ip
172.17.0.2
第三步:设置从库
#连接从库
docker exec -it mysql3311 bash
mysql -u root -p
#设置主库
change master to master_host='172.17.0.2',master_port=3306,master_user='backup',master_password='qfjava',master_log_file='mysqllogbin.000003',master_log_pos=591;
#开启从库
start slave;
#停止主从
stop slave;
#查看从库
show slave status \G;
#连接从库
docker exec -it mysql3312 bash
#设置主库
change master to master_host='172.17.0.2',master_port=3306,master_user='backup',master_password='qfjava',master_log_file='mysqllogbin.000003',master_log_pos=591;
#开启从库
start slave;
#查看从库
show slave status \G;
第四步:测试主从复制
分别连接三个数据库(1主2从)
开启二进制日志
2、创建并运行容器
master-password=qfjava
master-connect-retry=30