基于docker实现mysql主从复制
俩台机器,一主一从,主节点:10.0.8.17,从节点:10.0.8.14
基于docker部署mysql(主从节点都执行)
docker run -p 3306:3306 --name mysql -v /home/mysql/config:/etc/mysql -v /home/mysql/logs:/logs -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d -it --privileged=true mysql:8.0.18
/etc/mysql:mysql默认配置文件路径/var/lib/mysql:数据存储位置MYSQL_ROOT_PASSWORD=123456 设置root用户密码--privileged=true 权限提升 真root权限
修改配置文件
首先 my.cnf,在[mysqld]下增加一行:skip-grant-tables;重启mysql:docker restart mysql进入mysql容器:docker exec -it mysql /bin/bash
登录mysql修改密码开放远程连接权限
mysql -uroot -p #提示输入密码,直接回车即可跳过验证FLUSH PRIVILEGES;#不执行这步会报错set password for root@localhost = '新密码';ALTER USER 'root'@'%' IDENTIFIED BY '新密码' PASSWORD EXPIRE NEVER; #修改加密规则 ,ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码' ; #更新一下用户的密码 grant all privileges on *.* to 'root'@'%' with grant option; #开放远程访问FLUSH PRIVILEGES;quit;
再次修改配置
首先 my.cnf,注释skip-grant-tables;重启mysql:docker restart mysql进入mysql容器:docker exec -it mysql /bin/bashmysql -uroot -p #提示需要密码验证,此时就不可以跳过了
配置主从复制
修改主节点配置
mysql的配置文件都保存在 /etc/mysql下(容器内),映射到宿主机目录是 /home/mysql/configcd /home/mysql/configvim my.conf #添加以下内容到[mysqld]###要给从机同步的库(如果不写,默认全部同步)##binlog-do-db=db01###不给从机同步的库(多个写多行)##binlog-ignore-db=mysql##binlog-ignore-db=information_schema##binlog-ignore-db=performance_schema##binlog-ignore-db=performance_schema##binlog-ignore-db=sys###自动清理 7 天前的log文件,可根据需要修改expire_logs_days=7#### 开启二进制日志功能,可以随便取(关键)log-bin=master-bin### 唯一标识server-id=888
重启主节点mysqldocker restart mysql
修改从节点配置
vim /home/mysql/config/my.conf #添加以下内容到[mysqld] ,容器内对应路径/etc/mysql/my.conf##要给从机同步的库(如果不写,默认全部同步)#binlog-do-db=db01##不给从机同步的库(多个写多行)#binlog-ignore-db=mysql#binlog-ignore-db=information_schema#binlog-ignore-db=performance_schema#binlog-ignore-db=performance_schema#binlog-ignore-db=sys##自动清理 7 天前的log文件,可根据需要修改expire_logs_days=7### 开启二进制日志功能,可以随便取(关键)log-bin=slave-bin## 唯一标识server-id=666
重启从节点mysql
主从同步
查看主节点状态
--通过该命令可以查看master数据库当前正在使用的二进制日志及当前执行二进制日志位置show master status

进入从节点开始同步
change master tomaster_host='10.0.8.17',master_user='root',master_password='123456',MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=7475567 ;start slave; ##slave:从节点 master:主节点 stop slave 停止slave。reset slave重启slave。 reset master重启mastermaster_host :主节点的地址,指的是容器的独立ipmaster_port :主节点的端口号,指的是容器的端口号(默认3306)master_user :用于数据同步的用户master_password :用于同步的用户的密码master_log_file :指定从节点从哪个日志文件开始复制数据,即上文中提到的 File 字段的值master_log_pos :从哪个 Position 开始读,即上文中提到的 Position 字段的值
查看状态
show slave status;如下所示即为成功,现在在主节点新建表或者增加数据,在从节点即可看到。

