使用docker部署mysql主从复制(互为主从)

1、拉取mysql
docker pull mysql
2、在服务器1上创建mysql文件夹
mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf
touch /usr/local/mysql/conf/my.cnf
3、在服务器2上创建mysql文件夹
mkdir -p /usr/local/mysql/data /usr/local/mysql/logs /usr/local/mysql/conf
touch /usr/local/mysql/conf/my.cnf
4、创建容器
docker run -p 3306:3306 --name mysql \
-v /usr/local/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/mysql/logs:/var/log/ \
-v /usr/local/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql
5、配置服务器1的mysql文件my.cnf
[mysqld]
server-id=1
auto_increment_offset=1
auto_increment_increment=2
skip-slave-start
log-slave-updates=true
basedir = /var/lib/mysql

注意:mysql(我的默认拉取最新是8.1.0)寻找配置文件会从"/etc/my.cnf","/etc/mysql/my.cnf"和"~/.my.cnf"这三个目录里面去找,这里我挂载了第二个,由于我是挂载了个空的my.cnf到mysql,所以这里"[mysqld]"必须加,否则会报错


6、配置服务器2的mysql文件my.cnf
[mysqld]
server-id=2
auto_increment_offset=2
auto_increment_increment=2
skip-slave-start
log-slave-updates=true
basedir = /var/lib/mysql

注意:此处server-id两个服务器上的必须不一样,否则会报错,配置完之后重启mysql,刷子你配置

7、重启mysql

docker restart mysql


8、1给2赋予权限

进入容器:

docker exec -it mysql bash

以root用户登录mysql:

mysql -uroot -p密码

创建slave用户
create user 'slave'@'%' identified by '123456';

给slave用户赋权(如果此处报错root用户没有赋权的权限,重启mysql,退出到服务器命令那里,docker restart mysql
grant all privileges on *.* to 'salve'@'%' with grant option;

刷新权限:
flush privileges;
初始化bin-log日志
reset master;

查看日志文件的名称、位置,下面要用到
show master status;

注意:'slave'@后面如果是'localhost'意思是只允许本机登录,%表示支持远程登录,若果追求数据库安全的话后面可以加精确的ip,表示只允许某台服务器以slave用户登录


9、 2给1赋予权限(同上,一模一样)


10、容器同步设置1
退出mysql登录状态,远程登录获取公钥:
mysql -uslave -p123456 -h服务器2的ip -P3306 --get-server-public-key

退出远程登录,登录root用户,更改日志文件名称和记录的位置:
change master to master_host='服务器2的ip',master_port=3306,master_user='slave',master_password='123456',master_log_file='日志文件的名称',master_log_pos=日志文件的位置;


然后开启同步  执行:
start slave;
查看是否成功:
show slave status\G #此处没有分好“;”,否则会报错No query specified


11、容器同步设置2
mysql -uslave -pzyqsb6 -h服务器1的ip -P3306 --get-server-public-key
change master to master_host='服务器1的ip',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120;
start slave;
show slave status\G

12、成功

这两个都yes了,就成功了,使用Navicat在其中农一个创建数据库,另外一个都会做同样的复制。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值