序言
在MySQL数据库中,支持单项、异步复制。在复制过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器。主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。从服务器可以读取这个日志并将主服务器中的更改更新到从服务器中,实现同步。主从同步的好处不多说,简单介绍下。比方说用来实现服务器负载均衡,主服务器用来更新,删除,新建操作,从服务器用来进行查询操作;实现数据的异地备份等。
正文
配置环境
主服务器:
OS:Ubuntu14 .04
MySQL:MySQL5.5
IP:192.168.1.101
从服务器1:
OS:Ubuntu14 .04
MySQL:MySQL5.5
IP:192.168.1.102
从服务器2:
OS:Windows7
MySQL:MySQL5.5
IP:192.168.1.103
PS:博主在MySQL版本上遇到一个坑,在Windows7上博主用MySQL5.7做主服务器的时候, Slave_IO_Running: NO,报错为:Slave can not handle replication events with the checksum that master 。
查询得知是由于MySQL5.6以上的版本使用了crc32做binlog的checksum;当一个event被写入binary log(二进制日志)的时候,checksum也同时写入binary log,然后在event通过网络传输到从(slave)之后,再在从服务器中对其进行验证并写入从服务器的relay log。
网上解决方法为进入主服务器的mysql,执行set binlog_checksum =none;
博主试了还是没有效果,所以将MySQL版本换了5.5,其他小伙伴还是可以试试研究一下的。
1、主服务器配置
1.1修改主服务器的MySQL配置文件
博主实验,不管是Windows做主服务器还是Ubuntu做主服务,配置都是有效可行的,其中Windows的MySQL的配置文件在C:\ProgramData\MySQL\MySQL Server 5.5
下为my.ini。Ubuntu下MySQL的配置文件在etc/mysql/my.cnf
下。
打开MySQL的配置文件,在【mysqld】下添加:
server-id=1 #server-id 服务器唯一标识,一般来说主服务器为1
log_bin = mysql-bin #启动MySQL二进制日志,日志名为mysql-bin,从服务器就是copy这个的变化
log_bin_index = mysql-bin.index
binlog_do_db = test # 指定记录二进制日志的数据库,就是要备份的数据库
binlog_ignore_db = mysql #指定不记录二进制日志的数据库,就是不需要备份的数据库。
1.2登录主服务器MySQL创建从服务器用到的账户和权限
在主服务器下的MySQL中输入
GRANT REPLICATION SLAVE ON *.* TO 'test'@'192.168.1.%' IDENTIFIED BY '123456';
‘test’是从服务器登陆的用户名;‘192.168.1.%’是通配符,表示0-255的IP都可访问主服务器,如果只有一台从服务器就可以设定为指定IP,因为博主有两台从服务器,所以使用通配符;‘123456’是从服务器登陆的认证。
1.3重启MySQL
在Windows下直接点击左下角的MySQLmysq,选择MySQL55-Running,选择Restart。
在Ubunutu在,打开终端,输入service mysql restart
等待MySQL重启完成。
1.4进入MySQL,查看主机状态
show master status;
记录File和Position。
2、从服务器配置
2.1配置从服务器my.cnf
在【mysqld】中添加
server-id = 2
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
2.2重启Slave从服务器MySQL
service mysql restart
2.3登录Slave从服务器,连接Master主服务器
change master to master_host='192.168.1.101',master_port=3306,master_user='test',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=107;
master_host对应主服务器的IP地址,master_port对应主服务器的端口,master_log_file对应show master status显示的File列:mysql-bin.000003,master_log_pos对应Position列:107,否则有可能出现同步失败。
2.4登录MySQL状态下,启动Slave数据同步
start slave;
2.5登录MySQL状态下,查看Slave信息
show slave status\G;
Slave_IO_Running和Slave_SQL_Running都为yes才表示同步成功。
如果Slave_IO_Running和Slave_SQL_Running都为yes就可以在主服务器上的MySQL进行操作然后查看从服务器上的变化。
2.6.登录MySQL状态下,停止同步命令
stop slave;
设置BinaryLog的过期删除
1、 删除在指定的日志或日期之前的日志索引中的所有二进制日志。
mysql> PURGE BINARY LOGS TO 'mysql-bin.000020';
Query OK, 0 rows affected (0.10 sec)
删除mysql-bin.000020之前的日志。(不包括mysql-bin.000020)
mysql> PURGE BINARY LOGS BEFORE '2017-10-8 23:59:59';
Query OK, 0 rows affected (0.16 sec)
删除2017-10-8 23:59:59时间点之前的日志。
也可以在mysql中设置日志过期时间
mysql> set global expire_logs_days = 3;
Query OK, 0 rows affected (0.00 sec)
这里设置过期时间为3天。
注意事项
在双机复制环境下,应确保过期天数不应小于从机追赶主机binlog日志的时间。