mysql主从同步搭建和故障排除
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql主从同步搭建和故障排除相关的知识,希望对你有一定的参考价值。
主从同步的定义: 是存储数据的一种结构模式。
主:被客户端访问的数据库服务器就是主库服务器master
从:连接主库服务器,自动同步主库的所有数据到本机slave
1、什么是mysql主从同步?
当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库。
2、主从同步有什么好处?
水平扩展数据库的负载能力。
容错,高可用。Failover(失败切换)/High Availability
数据备份。
3.主从同步的具体内容和目的
不管是delete、update、insert,还是创建函数、存储过程,所有的操作都在master上。当master有操作的时候,slave会快速的接收到这些操作,从而做同步。
4.基本结构:
单向复制:主 --> 从
扩展应用
链式复制:主 --> 从 --> 从
双向复制:主 <--> 从
放射式复制:从 <-- 主 --> 从
|
从
5.实现原理
在master机器上,主从同步事件会被写到特殊的log文件中(binary-log);在slave机器上,slave读取主从同步事件,并根据读取的事件变化,在slave库上做相应的更改,就实现了主从同步!
6.主从同步事件有3种模式:
statement、row、mixed
statement:会将对数据库操作的sql语句写入到binlog中。
row:会将每一条数据的变化写入到binlog中。
mixed:statement与row的混合。Mysql决定什么时候写statement格式的,什么时候写row格式的binlog。
实现:
7.目的
当master上的数据发生改变的时候,该事件(insert、update、delete)变化会按照顺序写入到binlog中。
Mysql主从同步的搭建步骤:
主要分为【主库配置】和【从库配置】
例机IP及分配:master 192.168.4.52
slave 192.168.4.53
主库的配置步骤:
1.启用数据库binlog日志
# vim /etc/my.cnf
[mysqld]
server_id=52 //数据库的 id【主库与从库不可相同】
log-bin=master //启用binlog日志并设置路径
binlog-format="mixed" //指定binlog使用模式
2.授权用户
mysql> grant replication slave on *.*
-> to
-> [email protected]"192.168.4.53"
-> identified by "123456";
更新数据库权限
mysql>flush privileges;
3.查看master的状态
# show master status;
从库配置步骤(slave):
1.查看是否可以登陆数据库
mysql -h192.168.4.52 -u tom -p123456
show grants; //查看权限
2.指定数据库ID号(server_id)
vim /etc/my.cnf
[mysql]
server_id=53
systemctl restar mysqld
3.管理员指定数据库服务器的信息
mysql> change master to
-> master_host="192.168.4.52", //指定主库的ip地址
-> master_user="tom", //指定授权的用户名
-> master_password="123456",
-> master_log_file="master.000001", //指定主日志时可去主库查看填写
-> master_log_pos=447;
4.启用slave进程
mysql> start slave; //开启slave进程
mysql> show slave statusG; //查看slave进程
Slave_IO_Running: yes //查看线程是否运行
Slave_SQL_Running: Yes
I/O线程。该线程连接到master机器,master机器上的binlog dump线程会将binlog的内容发送给该I/O线程。该I/O线程接收到binlog内容后,再将内容写入到本地的relay log。
SQL线程。该线程读取I/O线程写入的relay log。并且根据relay log的内容对slave数据库做相应的操作。
注:Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即YES状态,否则说明同步失败。可用这两项判断主从同步是否成功
5.测试
mysql>create database ceshi; //master主库创建测试库
mysql>show databases; //slave从库上查看是否自动更新
常见问题排查:
若进程启用时,线程未yes状态,可查看下方报错信息进行排错
常见原因:
一:数据库UUID相同导致冲突
解决方法:vim /var/lib/mysql/auto.cnf 修改UUID使其不相同
重启数据库
重启slave进程
【若还无法同步则需重新指定数据库信息并重启slave进程即可】
二:数据库ID冲突,重新设置ID并重启服务即可
三: 查看命令是否写错
四:删除binlog日志的影响
【如果有一个将要进行同步的slave从属服务器,该服务器需读取您正在删除的日志之一,则该同步不会执行,并产生错误;如果slave从属服务器是关闭的(或master-slave主从关系关闭),若清理了将要读取的日志之一,则slave从属服务器启动后不能同步;当从属服务器正在复制时,删除binlog日志无影响,切无需停止主从服务】
以上是关于mysql主从同步搭建和故障排除的主要内容,如果未能解决你的问题,请参考以下文章