300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql - binlog主从复制

mysql - binlog主从复制

时间:2023-01-03 03:29:31

相关推荐

mysql - binlog主从复制

独角兽企业重金招聘Python工程师标准>>>

mysql - GTID主从复制

Mysql replication

从主服务器(master)将数据复制到另外slave服务器的过程。将主数据库DDL和DML操作通过二进制日志传输到从服务器上,从服务器按顺序执行这些日志记录的操作达到主从数据同步的目的。

复制操作是异步的。slave不需要持续保持连接接收master的数据。

原理

每个事务更新数据完成之前,master将数据的改变记录到二进制日志(Binary Log)中;写入完成后,master服务器通知存储引擎提交事务。slave上的I/O进程连接master,发出日志请求;Master接收后通过负责复制的I/O进程根据请求读取指定日志指定位置之后的信息返回给slave。除日志信息外,还包括本次返回日志信息已经到Master端的bin-log文件的名称和bin-log的位置。slave_I/O进程收到信息后,按顺序将 master的binary log events 复制到自己的中继日志(Relay Log)中; 并读取Master端的bin-log文件名和位置记录到master-info文件中。Slave_Sql进程检测到relay-log中新增了内容,解析并执行。

过滤复制

可根据实际情况Slave服务器配置‘replicate*’来指定(不)需要复制的db、table。

不推荐使用binlog-do-db, binlog-ignore-db, replicate-do-db 和 replicate-ignore-db 来设置需要过滤的数据库:通过默认的数据库为“mysql" 的连接, 过滤二进制的(SQL)语句日志的. 换句话说, 过滤不是基于查询的字符串的, 而实际于你使用的数据库。

推荐:在 slave上配置过滤, 使用基于查询中真正涉及到的表的选项

replicate-wild-do-table=db_name.%replicate-wild-ignore-table=mysql.%

操作

master服务器增加用于复制的用户msql_rep,授权replication,密码Rep@!123

mysql>grant replication slave on *.* to 'msql_rep'@'172.30.1.52' identified by 'Rep@!123';

修改Master的配置

vi /etc/f;开启BINGLOG: 增加行: log-bin = /usr/local/var/mysql/mysql-bin设置server-id值: 增加行: server-id = 51

在master服务器设置度锁定有效,确保没有新数据库操作,便于获得一致性快照.

mysql> fulsh tables with read lock;

查看master信息

mysql> show master status \G;

恢复写操作

mysql> unlock tables;

修改slave数据库配置文件f,增加server-id参数;servier-id的值唯一,不能与master和其他slaver配置相同。

重启slave数据库,关闭slave;指定master的复制用户、密码、主ip、复制日志文件、位置等。

service mysqld restartmysql -uroot -prootmysql> stop slave;mysql>change master to-> master_host ='172.30.1.51',// Master IP-> master_user='msql_rep', -> master_password='Rep@!123', -> master_log_file='mysql-bin.000010', //Master实现复制的binlog文件-> master_log_pos=2000; //Master实现复制的binlog文件的偏移量mysql> start slave;mysql> show slave status \G;

指定截止位置:

start slave until master_log_file='mysql-bin.000008',master_log_pos=310; 可以在master\slaver服务器上查看服务器进程状态

mysql> show processlist \G;

检测主从设置的正确性

当主库数据发生变化时,日志偏移量改变

master: 新增datebase和table

slave: 异步延时完成同步。

问题

Slave_SQL_Running:No

成因:

1、slave上这个表中出现了其他的写操作。

2、slave进程重启,事务回滚造成。

解决方法:

mysql> slave stop;mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER= 1; //客户端运行,用来跳过指定N个数的事件,只有当同步进程出现错误而停止的时候才可以执行。 mysql> slave start;

Slave_SQL_Running:No

成因:

1、网络连接不上

2、配置不对, replication slave和file没权限​​​

3、master_log_file、master_log_pos同步错误。

解决方法:

从master中找到最新的logfile及logpos;修改slave同步日志文件及位置。

change master to master_log_file='mysql-bin.000013', master_log_pos=8654;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。