MySQL基于binlog实现主从同步

MySQL内建的复制功能是构建大型,高性能应用程序的基础 通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器

1、MySQL支持的复制类型

基于语句(statement)的复制 在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。 基于行(row)的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。 混合型(mixed)的复制 默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

2、为什么要做主从复制

灾备 数据分布 负载平衡 读写分离 提高并发能力

3、主从复制原理

主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程)

 1、MySQL将数据变化记录到二进制日志中;
 2、Slave将MySQL的二进制日志拷贝到Slave的中继日志中;
 3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库
 ​
 详细步骤:
 1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave
 2、从库的IO线程和主库的dump线程建立连接。
 3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
 4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
 5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中
 6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge

4、MySQL复制常用的拓扑结构

主从类型(Master-Slave) 主主类型(Master-Master) 级联类型(Master-Slave-Slave)

基于binlog的主从同步

主库配置

 配置文件:
 [root@localhost ~]# tail -1 /etc/my.cnf
 server_id=1
 [root@localhost ~]# systemctl restart mysqld
 ​
 备份:
 [root@localhost ~]# mysqldump --opt -B db1 it school > db.sql
 ​
 授权用户:
 mysql> create user rep@'172.16.%.%' identified with mysql_native_password by '123456';
 mysql> grant replication slave on *.* to rep@'172.16.%.%';
 mysql>flush privileges;
 ​
 mysql> show master status;
 +---------------+----------+--------------+------------------+--------------------------------------------------------------------------------------+
 | File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                                                                    |
 +---------------+----------+--------------+------------------+--------------------------------------------------------------------------------------+
 | binlog.000015 |      756 |              |                  | 2db179b1-cf96-11ee-8b00-2e6ff2d90c84:1-14,
 d09e219c-cec9-11ee-baf1-2e6ff2d90c84:1-46 |
 +---------------+----------+--------------+------------------+--------------------------------------------------------------------------------------+
 1 row in set (0.00 sec)

从库配置

 配置文件:
 [root@localhost ~]# tail -1 /etc/my.cnf
 server_id=2
 [root@localhost ~]# systemctl restart mysqld
 ​
 还原主库备份:
 # scp db.sql 172.16.100.22:/root/
 ​
 mysql -uroot -pMySQL@123 < db.sql
 mysql> change master to
     -> master_host='172.16.100.21',
     -> master_user='rep',
     -> master_password='123456',
     -> master_log_file='binlog.000015',
     -> master_log_pos=756, #主的Position
     -> get_master_public_key=1;
 Query OK, 0 rows affected, 9 warnings (0.00 sec)
 ​
 mysql> start slave;
 Query OK, 0 rows affected, 1 warning (0.01 sec)

可选配置

 #[可选] 0(默认)表示读写(主机),1表示只读(从机)
 read-only=0
 #设置日志文件保留的时长,单位是秒
 binlog_expire_logs_seconds=6000
 #控制单个二进制日志大小。此参数的最大和默认值是1GB
 max_binlog_size=200M
 #[可选]设置不要复制的数据库
 binlog-ignore-db=test
 #[可选]设置需要复制的数据库,默认全部记录。
 binlog-do-db=需要复制的主数据库名字
 #[可选]设置binlog格式
 binlog_format=STATEMENT

报错解决:

 mysql> create user rep@'172.16.%.%' identified with mysql_native_password by '123456';
 Query OK, 0 rows affected (0.04 sec)
 ​
 mysql>  grant replication slave on *.* to rep@'172.16.%.%';
 ERROR 1410 (42000): You are not allowed to create a user with GRANT

原因:mysql.user表中的host字段为localhost,需要修改为%

 mysql>update user set host = '%' where user = 'root';
  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mysql主从同步备份策略 五月 18th, 2009 at 17:30 - 3,803 views 环境: 主从服务器上的MySQL数据库版本同为5.1.34 主机IP:192.168.0.1 从机IP:192.168.0.2 一. MySQL主服务器配置 1.编辑配置文件/etc/my.cnf # 确保有如下行 server-id = 1 log-bin=mysql-bin binlog-do-db=mysql #需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可 binlog-ignore-db=mysql #不需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可 log-slave-updates #这个参数一定要加上,否则不会给更新的记录些到二进制文件里 slave-skip-errors #是跳过错误,继续执行复制操作 2.建立用户 mysql> grant replication slave on *.* to slave@192.168.0.2 identified by ‘111111′; # grant replication slave on *.* to ‘用户名’@'主机’ identified by ‘密码’; # 可在Slave上做连接测试: mysql -h 192.168.0.1 -u test -p 3.锁主库表 mysql> FLUSH TABLES WITH READ LOCK; 4.显示主库信息 记录File和Position,从库设置将会用到 ===================== mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_do_db | Binlog_ignore_db | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 106 | | | +------------------+----------+--------------+------------------+ 5.另开一个终端,打包主库 cd /usr/local/mysql #mysql库目录 tar zcvf var.tar.gz var ============================
MySQLbinlog可以用于实现主从数据同步,即将主库上的数据变更操作记录在binlog中,然后通过将binlog传输给从库,从库可以通过解析binlog来执行相同的数据变更操作,从而保持主从数据的一致性。 以下是实现MySQL主从数据同步的基本步骤: 1. 在主库上开启binlog:在主库的配置文件中开启binlog功能,可以通过设置`log_bin`参数为ON来启用binlog。 2. 配置主库的唯一标识:为了在主从复制过程中正确识别和处理binlog,需要为主库配置一个唯一标识,可以通过设置`server-id`参数来指定一个唯一的ID。 3. 配置从库连接主库:在从库上配置连接主库的信息,包括主库的IP地址、端口号、用户名、密码等。可以通过设置`master_host`、`master_port`、`master_user`、`master_password`等参数来配置连接信息。 4. 启动从库复制进程:在从库上启动复制进程,执行`CHANGE MASTER TO`命令来告诉从库连接主库并开始复制数据。可以使用`MASTER_LOG_FILE`和`MASTER_LOG_POS`参数来指定从哪个binlog文件的哪个位置开始复制。 5. 启动从库复制:执行`START SLAVE`命令来启动从库的复制进程,从库会连接主库并开始复制数据。 6. 监控同步状态:可以使用`SHOW SLAVE STATUS`命令来查看从库的复制状态,包括复制是否正常、延迟情况等。 通过以上步骤,主库上的数据变更操作会被记录在binlog中,并通过复制进程传输给从库,从库会解析并执行相同的数据变更操作,实现主从数据的同步。 希望以上信息对你有帮助。如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值