Mysql主从复制,Master_Slave一主一从
前言:
? 需要掌握docker的知识,本文章是在云服务器中,创建两个mysql容器(容器间相互隔离的),达到主mysql与从mysql间的数据同步。
一、创建两个mysql容器
- 第一个mysql(主),端口
3308 ,容器名称mysql_master ,账户密码 root-123456,mysql版本5.5。
docker run -p 3308:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5
- 第一个mysql(从),端口
3309 ,容器名称 mysql_slave ,账户密码 root-123456,mysql版本5.5。
docker run -p 3309:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5
二、配置Master节点
-
进入Master容器内部。 docker exec -it mysql_master /bin/bash
-
进入目录/etc/mysql 目录下,找到my.cnf 文件,不同版本mysql配置文件路径不同。 -
使用vim编辑器,编辑my.cnf ;会出现bash: vim: command not found ,分别执行下面语句,安装vim就可以(比较慢,耐心等待)。 apt-get update
apt-get install vim
-
安装完成,编辑my.cnf 。 [mysqld]
server-id=100
log-bin=master-bin
binlog-format=ROW // 二级制日志格式,有三种 row,statement,mixed
binlog-do-db=数据库名 //同步的数据库名称,如果不配置,表示同步所有的库
-
配置完成,重启mysql(失败也没有关系)。 service mysql restart
-
再重启Master节点mysql容器。 docker restart mysql_master
-
再次进入mysql容器 docker exec -it mysql_master /bin/bash
-
登录到mysql客户端。 mysql -uroot -p123456
-
在Master数据库创建数据同步用户,授予用户 Slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。 mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
-
Master节点配置完毕
三、配置Slave节点
-
进入mysql_slave 容器,一样修改my.cnf 文件 [mysqld]
server-id=101
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
read_only=1
-
重启mysql,重启mysql_slave容器。
四、开启Master-Slave主从复制
- 进入
Master 节点mysql客户端,输入show master status 查看Master状态。
? 记录File 列和Position 列的值,可能会变化,后面如果操作报错,再过来看看它俩的值是否变化。
-
进入Slave 节点mysql客户端,配置下面语句。 change master to master_host='172.18.0.3', master_user='slave', master_password='123456', master_port=3308, master_log_file='master-bin.000001', master_log_pos=617, master_connect_retry=30;
master_host:master节点 ip master_user:master节点 账号 master_password:master节点 密码 master_port:master节点 端口 master_log_file:File列的值 master_log_pos:Position列的值 -
在Slave 节点mysql客户端,开启slave。 start slave;
-
在Slave 节点mysql客户端,查看主从复制同步的状态。 show slave status \G;
-
Slave_IO_Running 为yes,Slave_SQL_Running 为yes,则成功没有问题了,否则的话,错误信息会在Last_IO_Error 显示。 #可能错误的原因
1、网络不通:检查ip,端口
2、密码不对:检查是否创建用于同步的用户和用户密码是否正确
3、pos不对:检查Master的 Position
-
测试、master节点数据库创建库表,自动同步到slave节点数据库。
如何停止从服务复制功能
stop slave;
如何重新配置主从
stop slave; reset master;
|