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
-> tom@"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 status\G; //查看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主从同步搭建和故障排除)