Mysql主从复制
1.先建立数据存放目录(/data/)
--mysql-master
--data
--conf
--my.cnf
--mysql-slave
--data
--conf
--my.cnf
2. 准备好 Mysql Master(主库)和Mysql Slave(从库)的my.cnf文件
Master my.cnf 配置文件:
[mysqld]
server_id = 1 #标识服务实例
log-bin= mysql-bin
read-only=0 #0表示支持可读写、1的话表明仅支持可读
#忽略的数据库,除了这些其他都会进行同步
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
Slave my.cnf 配置文件:
[mysqld]
server_id = 2 #标识服务实例
log-bin= mysql-bin
read-only=1 #0表示支持可读写、1的话表明仅支持可读
#忽略的数据库,除了这些其他都会进行同步
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
3. 创建master主容器
docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root
-v /data/mysql-master/data:/var/lib/mysql
-v /data/mysql-master/my.cnf:/etc/mysql/my.cnf
mysql:5.7
4. 创建slave从容器
docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root
-v /data/mysql-slave/data:/var/lib/mysql
-v /data/mysql-slave/my.cnf:/etc/mysql/my.cnf
mysql:5.7
5. master容器设置
#进入master容器
docker exec -it mysql-master bash
#启动mysql命令,刚在创建窗口时我们把密码设置为:
rootmysql -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;
6. salve容器设置
#进入slaver容器
docker exec -it mysql-slave 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=3306;
-- 启动从库同步
start slave;
-- 查看状态
show slave status\G;
master_host
为主机的ip,可通过docker inspect mysql-master
查看NetworkSettings–>IPAddress。
master_log_file
对应show master status
查询结果中的File。
master_log_pos
对应show master status
查询结果中的Position,如果不设置则默认从master
日志中的第一行开始同步。
master_port
为master
暴露的端口,需要注意的是:不是master
映射到宿主机的端口
如果 show slave status\G
命令结果中出现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两项都为Yes,那说明没问题了。