1.环境要求
操作系统:centOS6.5或以上
Mysql版本:mysql5.5
主机配置:4核CPU、4G内存
2.主从复制的方式
mysql5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局十事务标示符),下面主要介绍基于日志(binlog)的复制。
主从复制的原理
master将数据改变记录到二进制文件(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制事件(binary log events);
slave通过I/O线程读取master中的binary log events并写入到它的中继日志(relay log);
slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次完成数据在本地的存储,进而实现将改变反映到自己的数据;
3.主从复制注意的点
主从服务器操作系统版本和位数一致
master和slave数据库的版本要一致
master和slave数据库中的数据要一致
master开启二进制日志,master和slave的server_id在局域网内必须唯一
4.主从配置简要步骤
master上面的配置:
1.安装数据库
2.修改数据库配置文件,指明server_id,开启二进制日志(log-bin)
3.启动数据库,查看当前是哪个日志,position号是多少
4.登录数据库,授权数据复制用户
5.备份数据库(记得加锁和解锁)
6.传送备份数据到slave上
7.启动数据库
slave上面的配置:
1.安装数据库
2.修改数据库配置文件,指明server_id
3.启动数据库,还原备份
4.查看当前是哪个日志,position号是多少
5.指明master的地址、用户、密码等信息
6.开启同步,查看状态
5.单向主从环境的搭建
两台数据库服务器的selinux都要disable(永久关闭selinux,请修改/etc/selinux/config,将SELINUX改为disabled)
修改master的配置文件/etc/my.cnf,增加以下配置项:
server_id = 100 #一般设置为ip的最后一部分
binlog-do-db = admin #需要备份的数据库
binlog-ignore-db = mysql #不需要复制的数据库
log-bin = edu-mysql-bin #开启二进制日志功能,可以随便定义但是建议有含义
6.重新启动master数据库服务,创建数据库,创建数据库同步用户并授予相应的权限
创建数据库同步用户并授予相应的权限:
grant replication slave, replication client on *.* to 'repl'@'192.168.1.206' identified by 'admin.123';
flush privileges;
show master status; #查看position号,记下position号(从机上需要用到这个position和现在的日志文件)
7.创建admin库、表,并写入一定量的数据,用于模拟现有的业务系统数据库
8.修改slave的配置文件/etc/my.cnf,增加以下配置项:
server_id = 206 #一般设置为ip的最后一部分
binlog-do-db = admin #需要备份的数据库
binlog-ignore-db = mysql #不需要复制的数据库
log-bin = edu-mysql-bin #开启二进制日志功能,以备 Slave 作为其它 Slave 的 Master 时使用
9.重启slave数据库服务,将数据复制到从数据库中
10.slave中添加master相关信息
change master to master_host='121.199.168.20', master_user='repl', master_password='admin.123', master_port=3306, master_log_file='edu-mysql-bin.000008' , master_log_pos=513, master_connect_retry=30;
上述参数说明:
master_log_file、master_log_pos是通过上述master的状态获取的
master_connect_retry #当重新建立主从连接时,如果连接建立失败,间隔多久后重试。 单位为秒,默认设置为 60 秒,同步延迟调优参数。
11.slave执行主从同步:start slave;
12.show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两个参数为Yes显示主从状态正常
13.主从配置完成,可以在master上面修改数据库验证slave数据库是否发生了改变
14.注意:如果再slave没做只读控制的情况下,千万不要在slave中手动插入数据,那样数据就会不一致,主从就会断开,就需要重新配置了
15.如果同步过程中出现错误,可以在slave上重置主从复制数据
reset slave
change master to master_host='121.199.168.20', master_user='repl', master_password='admin.123', master_port=3306, master_log_file='edu-mysql-bin.000008' , master_log_pos=513, master_connect_retry=30;
master_log_file、master_log_pos根据最新的master状态获取