在Docker中配置mysql主从复制
1.创建文件夹和配置文件
mkdir /docker
mkdir /docker/mysql
mkdir /docker/mysql/{master,slave}
# 主库配置
mkdir /docker/mysql/master/data
vim /docker/mysql/master/my.cnf
# 下面的内容填入my.cnf
[mysqld]
user=mysql
log-bin=mysql-bin
server-id=1
character-set-server=utf8
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
# 从库配置
mkdir /docker/mysql/master/data
vim /docker/mysql/master/my.cnf
# 下面的内容填入my.cnf
[mysqld]
user=mysql
server-id=2
character-set-server=utf8
default_authentication_plugin=mysql_native_password
table_definition_cache=400
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
2.创建docker 桥接网络,用于MySQL主从容器之间互联
docker network create mysql
3.创建mysql容器
# 创建mysql主数据库容器
docker run -d --privileged=true -p 3307:3306 -v /docker/mysql/master/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/master/data:/var/lib/mysql -v /docker/mysql/master/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-master --network mysql --network-alias mysql-master mysql:latest
# 创建mysql从数据库容器
docker run -d --privileged=true -p 3308:3306 -v /docker/mysql/slave1/my.cnf:/etc/mysql/my.cnf -v /docker/mysql/slave1/data:/var/lib/mysql -v /docker/mysql/slave1/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 --name mysql-slave1 --network mysql --network-alias mysql-slave1 mysql:latest
4.配置mysql主从复制
(1)配置主服务器:
docker exec -it mysql-master bash
mysql -uroot -p
// 输入密码
# 我这里用root用户来进行主从复制,也可以自己创建新用户来替换掉
# '%' 代表所有ip都能来复制,可以改成从自己的ip来提高安全性
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%';
# 刷新权限
flush privileges;
# 查看主服务器状态
show master status;
# 记住其中的File Position 列的内容
# 退出mysql
exit;
# 退出mysql容器
exit
(2)配置从服务器:
# 进入MySQL从数据库容器
docker exec -it mysql-slave1 bash
mysql -uroot -p
# 输入密码
change master to master_host='mysql-master',master_user='root',master_password='root密码',master_log_file='刚才记住的File列的内容',master_log_pos=position的内容(不用加引号),master_port=3306;
# 启动slave
start slave;
# 查看slave状态
show slave status\G;
当 Slave_IO_Running , Slave_SQL_Running 都为yes时代表配置成功
5.验证
去主库做一些操作,看看从库是否会同步更新,如果用的是一些图形化管理工具,记得点一下刷新
6.关于非docker环境下的主从复制配置
只需不执行关于docker的命令就可