基于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/bash
mysql -uroot -p #提示需要密码验证,此时就不可以跳过了
配置主从复制
-
修改主节点配置 mysql的配置文件都保存在 /etc/mysql下(容器内),映射到宿主机目录是 /home/mysql/config
cd /home/mysql/config
vim 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
-
重启主节点mysql docker 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
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XdrFe6J-1640182676684)(https://cdn.jsdelivr.net/gh/chenguod/picture/202112212033243.png)] -
进入从节点开始同步 change master to
master_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重启master
master_host :主节点的地址,指的是容器的独立ip
master_port :主节点的端口号,指的是容器的端口号(默认3306)
master_user :用于数据同步的用户
master_password :用于同步的用户的密码
master_log_file :指定从节点从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos :从哪个 Position 开始读,即上文中提到的 Position 字段的值
-
查看状态 show slave status;
如下所示即为成功,现在在主节点新建表或者增加数据,在从节点即可看到。
?
|