CentOS6.5下实现MySQL5.5主从实时同步备份
更新时间:2018-10-06 分类:网络技术 浏览量:1716
前提
1、Mysql版本一致;
2、主、从服务器都存在相同的数据库,且初始状态一样;
系统环境
主服务器:CentOS6.5 64bit
从服务器:CentOS6.5 64bit
WEB环境
主服务器:oneinstack,MySQL版本:5.5.54
从服务器:lnmp,MySQL版本:5.5.54
第一步:保持版本一致
为保证同步成功,最好是主、从服务器的Mysql版本保持一样。如果不一致,升级一下低版本就行了。输入mysql -V查看版本。
第二步:开启远程访问
主服务器必须开启远程访问,否则从服务器无法连接主服务器来获取数据。oneinstack默认在iptables里关闭了Mysql的远程访问权限,所以需要打开。
iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
service iptables save #保存iptables规则
第三步:主机新建同步账户
主服务器上新建一个远程访问用户,为了安全起见,不要用root账户来同步。
grant replication slave on *.* to 'slaveuser'@'%' identified by '123456' ;//新建用户名为slaveuser,密码为123456的同步专用用户,这是注释,不要复制执行
flush privileges;//刷新权限,这是注释,不要复制执行
第四步:修改主机my.cnf
Linux的my.cnf在/etc/my.cnf路径下要保证以下项目必须得有,'//'后面是注释,实际使用时要去掉
[mysqld]
log-bin=mysql-bin
binlog_format=mixed//binlog保留天数,过期自动删除
server-id = 15 //主机的server-id,一般用IP地址最后一段
binlog-do-db = seofangfa.com // 需要同步的数据库
binlog-ignore-db = mysql // 不需要同步的数据库
第五步:修改从机my.cnf
server-id = 175 //主机的server-id,一般用IP地址最后一段
replicate-do-db = seofangfa.com// 需要同步的数据库
replicate-ignore-db = mysql// 不需要同步的数据库
第六步:查看主机情况
show master status;
MySQL [mysql]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 | 97860 | seofangfa.com | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
第七步:开始从服务器同步
mysql> change master to master_host='主服务器IP',master_user='slaveuser',master_password='123456', master_log_file='mysql-bin.000006',master_log_pos=97860;
#开始同步线程
mysql> start slave;
#查看开启情况
mysql> show slave status\G;
如果出现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
表示主从同步进行中,如:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 8.8.8.8
Master_User: slaveuser
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 97860
Relay_Log_File: iZ25r8c8rg1Z-relay-bin.000002
Relay_Log_Pos: 98006
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: seofangfa.com
Replicate_Ignore_DB: mysql
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 97860
Relay_Log_Space: 98169
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 15
1 row in set (0.00 sec)
主数据库或者从数据库挂掉情况下的mysql主从同步
1、当主数据库挂掉的时候,其实默认情况下从数据库会每60秒去访问主数据库进行同步,直到住数据库开启
2、当从数据库挂掉,直接使用命令start slave开始同步功能即可
mysql主从同步和操作系统无关,和mysql版本也基本无关。
mysql主从同步的速度基本是秒同以内,但是当然还是存在时间的差异,所以从数据库基本只做查询用,在修改,实时性要求高,事物的操作单位内,不用从库,用主库的链接。
参考资料:http://blog.csdn.net/why7282299/article/details/10577025
注意
从库在同步过程中遇到了问题,原因是我在两边同时登录,导致到两边数据库都记录一条同样的登录信息,于是在同步时就发生了Last_SQL_Error: Error 'Duplicate entry '64' for key 'PRIMARY'' on query. 这样的主键冲突的问题,解决办法如下:
修改从库的mysql的配置文件,/etc/my.cnf,在[mysqld]下面添加一行
slave_skip_errors = 1062
保存、重启mysql服务,再次查看主从复制,问题解决。
参考文章:http://blog.csdn.net/lylyf99/article/details/8984350
转自:方法博客