1,下载镜像,启动容器
docker pull docker.io/mysql
docker run --name mastermysql -d -p 3301:3306 -e MYSQL_ROOT_PASSWORD=root docker.io/mysql
docker run --name slavemysql -d -p 3302:3306 -e MYSQL_ROOT_PASSWORD=root docker.io/mysql
首先在主从没有生效的时候,要保持两台服务器数据库、表相同,数据相同
master容器上执行:
mysqldump -uroot -p --all-databases >/root/all_database.sql
拷贝到slave容器中,在slave从库上执行:
mysql -uroot -p <all_database.sql
2,修改配置文件
进入到容器内部,修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
主库配置
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
server_id = 1
log-bin = mysql-bin #发送binlog日志给从库
read-only = 0 #读写权限
replicate-ignore-db = mysql
replicate-ignore-db = sys
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
max_binlog_size = 500M
expire_logs_days = 15
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
从库配置
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
server_id = 2 #数据库唯一标识
read-only=1 #只读权限
replicate-ignore-db=mysql #不同步mysql库
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
#以下开启多线程同步数据
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
修改完配置后 docker restart 重启容器
3,master容器设置
//进入master容器
docker exec -it mastermysql bash
//启动mysql命令,刚在创建窗口时我们把密码设置为:root
mysql -u root -p
//创建一个用户来同步数据,每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE 权限。
CREATE USER 'slave'@ '%' IDENTIFIED BY '123456'; (其实可省略)
GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';
//这里表示创建一个slaver同步账号slave,允许访问的IP地址为%,%表示通配符
//查看状态,记住File、Position的值,在Slave中将用到
show master status/G;
slave容器设置
//进入slaver容器
docker exec -it slavemysql bash
//启动mysql命令,刚在创建窗口时我们把密码设置为:root
mysql -u root -p
//设置主库链接
change master to master_host='172.17.0.2',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3301;
//启动从库同步
start slave;
//查看状态
show slave status\G;
如果 show slave status\G命令结果中出现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两项都为Yes,那说明没问题了。