mysql主从同步搭建和故障排除

网友投稿 286 2022-11-12

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日志无影响,切无需停止主从服务】

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PCB接口接口公母之分:公头和母头的接法
下一篇:基于log4j2.properties踩坑与填坑
相关文章

 发表评论

暂时没有评论,来抢沙发吧~