Mysql 主从复制
系统 CentOS7
本次mysql主从复制将用docker来实现,本次实习有以下两种方式
- 单向主从
- 双向主从
本次主从复制:基于日志(binlog)
Master和Slave数据库的版本要一致
单向主从
安装步骤
本次将要修改my.cnf 文件 可以先启动容器拷贝my.cnf文件
文件拷贝
docker cp 本地文件路径 ID全称:容器路径 (本地到容器)
docker cp ID全称:容器文件路径 本地路径 (容器到本地)
yum remove docker ##删除docker
yum -y install docker-io ##安装docker
// 启动 Docker service docker start
镜像加速
修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
然后重新启动下docker服务 systemctl restart docker
docker pull registry.cn-hangzhou.aliyuncs.com/hhzz/mysql
docker ps -a 查看
docker start id 启动
创建下面3个文件
mkdir data logs conf 注意:conf/my.conf
打开 vi conf/my.conf
在 [mysqld] 中增加以下配置项
## 设置server_id,一般设置为IP
server_id=1
## 复制过滤:需要备份的数据库,输出binlog
#binlog-do-db=roncoo
## 复制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
## 开启二进制日志功能,可以随便取,最好有含义
log-bin=edu-mysql-bin
## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
## 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
# mysql清除过期日志的时间,默认值0,不自动清理,而是使用滚动循环的方式。
expire_logs_days = 0
# 如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。
max_binlog_size = 1000M## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
:wq保存
docker exec -it id bash 或 /bin/sh 启动一个伪终端以交互式的方式进入某个容器(使用exit退出后容器不停止运行)
进入容器 mysql -uroot -p
Enter password: //输入密码即可
myslq> show master status;
记住 File 跟 Position
master 安装完毕
安装Slave 同上 Slave my.conf 文件同上加入 一些配置
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## 防止改变数据(除了特殊的线程)
read_only=1
# 默认值N=1,使binlog在每N次binlog写入后与硬盘同步,ps:1最慢
sync_binlog = 1
进入容器 Slave mysql -uroot -p
change master to master_host='IP', master_user='用户名', master_password='密码', master_port=3306, master_log_file='masterFile文件名', master_log_pos=1389,master_log_pos= MasterPosition, master_connect_retry=30;
开始同步 mysql> start slave;
查看主从同步状态 mysql> show slave status\G;
两个为 YES 表示成功。
双向主从.show master status; 记住 Slave 上的 File 跟 Position 在 master 中执行就OK了