docker安装mysql实现mysql的主从复制

环境准备:可联网的linux操作系统,已安装好的docker应用,docker安装可参考docker安装

1.安装mysql

#安装mysql的主节点(直接run的时候,docker会自动下载所需要的镜像)
docker run --restart always -p 3309:3306 --name master -v /file/mysql/logs:/logs -v /file/mysql/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7


#安装mysql的从节点
docker run --restart always -p 3310:3306 --name slave -v /file/mysql1/logs:/logs -v /file/mysql1/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7

 

2.开启mysql的远程访问

#进入master容器中
docker exec -it master bash

#连接mysql
mysql -u root -p

#输入mysql密码

123456

#开启mysql远程连接

GRANT ALL ON *.* TO 'root'@'%';

flush privileges;

#退出master容器

exit
#修改mysql从节点的远程访问同上

3.修改mysql的配置文件

1.使用docker cp命令修改配置文件

#将master容器内的my.cnf文件复制出来

docker cp master:/etc/mysql/my.cnf master.cnf
#修改master的my.cnf文件
vim master.cnf
如果没有安装vim可以使用apt安装vim
apt-get update
apt-get install vim
在最后追加
## 设置server_id,注意要唯一
server-id=1
## 开启二进制日志功能
log-bin=mysql-bin

#保存,将修改后的my.cnf 复制到容器中

docker cp master.cnf master:/etc/mysql/my.cnf 

#将slave容器内的my.cnf文件复制出来

docker cp slave:/etc/mysql/my.cnf slave.cnf
#修改slave的my.cnf文件
vim slave.cnf
在最后追加
## 设置server_id,注意要唯一
server-id=2 
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin  
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin 

#保存,将修改后的my.cnf 复制到容器中

docker cp slave.cnf slave:/etc/mysql/my.cnf 


#重启master容器和slave容器
docker restart master
docker restart slave
#如果报错请查看docker的日志
docker logs 容器名|容器id

2.使用ehco命令直接在文件中追加

## 进入master容器中
docker exec -it master bash
## 执行追加命令
echo '[mysqld]'>/etc/mysql/my.cnf
echo '## 设置server_id,注意要唯一'>>/etc/mysql/my.cnf
echo 'server-id=1'>>/etc/mysql/my.cnf
echo '## 开启二进制日志功能'>>/etc/mysql/my.cnf
echo 'log-bin=mysql-bin'>>/etc/mysql/my.cnf
echo '!includedir /etc/mysql/conf.d/'>>/etc/mysql/my.cnf
echo '!includedir /etc/mysql/mysql.conf.d/'>>/etc/mysql/my.cnf

## 进入slave容器中
docker exec -it slave bash
## 执行追加命令
echo '[mysqld]'>/etc/mysql/my.cnf
echo '## 设置server_id,注意要唯一'>>/etc/mysql/my.cnf
echo 'server-id=2'>>/etc/mysql/my.cnf
echo '## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用'>>/etc/mysql/my.cnf
echo 'log-bin=mysql-slave-bin'>>/etc/mysql/my.cnf
echo '## relay_log配置中继日志'>>/etc/mysql/my.cnf
echo 'relay_log=edu-mysql-relay-bin'>>/etc/mysql/my.cnf
echo '!includedir /etc/mysql/conf.d/'>>/etc/mysql/my.cnf
echo '!includedir /etc/mysql/mysql.conf.d/'>>/etc/mysql/my.cnf

 

 

分别在master、slave节点查看my.cnf文件是否起作用,如果不起作用请重新执行

show GLOBAL VARIABLES like 'log_bin%';


 show GLOBAL variables like 'server_id';

 4.创建主从复制的用户并赋予远程连接权限

#进入master的sql连接中执行
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
flush privileges;

5.开启主从复制

在master节点的mysql中查看master状态,记录下file的position的值

show master status;

在slave节点的mysql中执行(其中master_log_file的值为上面master查询的file值master_log_pos为position的值

master_host可在执行

docker inspect --format='{{.NetworkSettings.IPAddress}}'  master 获取)

change master to master_host='172.17.0.4', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 154, master_connect_retry=30;

start slave;

show slave status;

6.测试

在master节点下添加一个数据库,观察slave节点下是否会添加相同的数据库,如果添加成功,则说明主从复制已完成

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值