linux学习第五十五篇: MySQL主从介绍,准备工作,配置主,配置从,测试主从同步

MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的

MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

主从过程大致有3个步骤
1)主将更改操作记录到binlog里
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
3)从根据relaylog里面的sql语句按顺序执行

主上有一个log dump线程,用来和从的I/O线程传递binlog

从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
linux学习第五十五篇: MySQL主从介绍,准备工作,配置主,配置从,测试主从同步

准备工作

准备两台机器,都安装mysql,详情看第三十五篇。安装后主从两台机器都启动

配置主

主上的IP:192.168.118.133

修改vim /etc/my.cnf
增加server-id=133和log_bin=xie1

linux学习第五十五篇: MySQL主从介绍,准备工作,配置主,配置从,测试主从同步

修改完配置文件后,启动或者重启mysqld服务:
/etc/init.d/mysqld restart
重启之后会出现两个新的文件,xie1.index和xie1.000001,index是索引文件,另一个是日志文件,这两个是实现主从的根本
linux学习第五十五篇: MySQL主从介绍,准备工作,配置主,配置从,测试主从同步

把mysql库备份并恢复成xie库,作为测试数据
备份mysql库:
mysqldump -uroot -p111111 mysql > /tmp/mysql.sql
创建数据库xie:
mysql -uroot -p111111 -e “create database xie”
把备份数据恢复成xie库:
mysql -uroot -p111111 xie < /tmp/mysql.sql

创建用作主从同步数据的用户,下面的IP 136是从的IP:
grant replication slave on . to ‘repl’@’192.168.118.136’ identified by ‘111111’;·

把表锁住,不要再写入数据,暂时写到这:
flush tables with read lock;

show master status;
这里的Position的数字下面的master_log_pos会用到
linux学习第五十五篇: MySQL主从介绍,准备工作,配置主,配置从,测试主从同步

把主上的mysql中的库备份,到时候同步到从上

配置从

主上的IP:192.168.118.136

修改vim /etc/my.cnf
配置server-id=136,要求和主不一样,从上不用log_bin这个二进制日志文件

修改完配置文件后,启动或者重启mysqld服务
/etc/init.d/mysqld restart

把主上的备份的数据同步到从上,输入主上的root密码:
scp 192.168.118.133:/tmp/*sql /tmp/
linux学习第五十五篇: MySQL主从介绍,准备工作,配置主,配置从,测试主从同步

然后在从上数据库中创建对应的数据库,如上面我们同步过来的是zrlog和mysql,所以我们在在mysql中创建zrlog和mysql数据库。然后使用命令:mysql -uroot -p111111 zrlog < /tmp/zrlog.sql 把相关的数据库备份同步,要与主上的数据库一样,除了test和performance_schema数据库,因为这两个是默认的。

stop slave;

实现主从关键的一步:
change master to master_host=’192.168.118.133’, master_user=’repl’, master_password=’111111’, master_log_file=’xie1.000001’, master_log_pos=658961;

start slave;

可以查看是否主从配置成功:
show slave status\G;
查看下列两个是否都为YES:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
还需关注
Seconds_Behind_Master: 0 //为主从延迟的时间
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:

下列这些参数可以在主或者从上配置,在my.cnf里配置:
主服务器上
binlog-do-db= //仅同步指定的库
binlog-ignore-db= //忽略指定库
从服务器上
replicate_do_db=
replicate_ignore_db=
replicate_do_table=
replicate_ignore_table=
replicate_wild_do_table= //如aming.%, 支持通配符%
replicate_wild_ignore_table=

还要到主上执行让表恢复写操作:
unlock tables;

测试主从同步

进入主上数据库:
mysql -uroot -p111111;

查看user表有几行:
select count(*) from user;

清空user表:
truncate table db;

到从上数据库中查看user表,会发现user表已同步清空:
select count(*) from user;

主上继续删除user表:
drop table user;

从上查看user表,发现没有了user表

有的遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致。
https://www.2cto.com/database/201412/364479.html