mysql5.7主从(master/slave)同步配置实验记录

内容已迁移至:http://www.3kkg.com/1004

------------------------

这是一篇mysql5.7主从(master/slave)同步配置实验记录。

因为需要安装多个mysql,所以我结合了docker来解决这个问题

实验环境:

mysql5.7+docker(docker安装部分脚本可以参考:http://www.3kkg.com/167526


1、下载mysql5.7的镜像

docker pull mysql:5.7

2、启动两个mysql容器,分别当做master和slave,且端口分别为3306和3307

docker run --name=mysql-master -it -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run --name=mysql-slave -it -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

3、进入master的容器并登录mysql(2a8是容器id)

docker exec -it 2a8 bash
mysql -uroot -p123456

因为主从同步的原理是:主库将每次数据库操作都记录到一个文件中,然后从库连接到主库并读取这个文件进行一样的操作。由此达到主从同步的效果。

所以我们要先新建一个从库用来登录主库并读取上文提到的文件的账户,并赋予他相应权限。在这里为了实验方便直接使用root账户并直接给root账户赋予所有的权限。

grant all on *.* to 'root'@'%' identified by '123456';
flush privileges;

修改master的配置(有的容器没有vim,可以自行安装一下vim或者用其他编辑器)

在master的配置中增加以下配置

[mysqld]
log-bin=mysql-bin
server-id=1
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-do-db=test

server-id每个数据库必须不一样,一样会有错误

binlog-ignore-db表示不需要同步的数据库

binlog-do-do表示需要同步的数据库

配置完了重启数据库,因为这里使用的是docker所以直接重启容器即可

docker restart 2a8

重新进入master的mysql命令行并使用以下命令

show master status;

会看到以下数据,这里可以将file和position的值记录下来之后有用

+------------------+----------+--------------+---------------------------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                            | Executed_Gtid_Set |
+------------------+----------+--------------+---------------------------------------------+-------------------+
| mysql-bin.000001 |      154 | test         | information_schema,mysql,performance_schema |                   |
+------------------+----------+--------------+---------------------------------------------+-------------------+
1 row in set (0.00 sec)

到这一步master的数据库就配置完毕了

4、配置从库,有些命令跟主库命令基本差不多,这里不多赘述,只记录不同的部分

修改slave数据库的配置

[mysqld]
log-bin=mysql-bin
server-id=2
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

然后重启数据库

之后再登录数据库的命令行界面执行

stop slave;
change master to master_host='192.168.5.131',master_user='root',master_password='123456',master_log_file='mysql-bin.000001', master_log_pos=154;
start slave;

master_host是主库所在的ip

master_user是上头设置的登录账号,这里使用root

master_password是密码

master_log_file和master_log_pos是上头说需要记住的两个数据。

然后可以使用

show slave status;

查看从库的配置。

5、至此主从同步设置完毕,可以自行测试一下结果。