MySQL---SQL主从复制

 

MySQL主从复制是一种常见的数据库复制技术,它可以将一个MySQL服务器上的数据实时同步到另一个MySQL服务器上。

原理

MySQL主从复制的原理是基于二进制日志(binary log)和中继日志(relay log)实现的。当一个MySQL服务器进行写操作时,会将这些操作记录在二进制日志中。然后,另一个MySQL服务器会读取这些二进制日志,并将其应用到自己的数据上,从而实现数据的同步。

具体来说,MySQL主从复制的过程如下:

  1. 源MySQL服务器将写操作记录在二进制日志中。
  2. 源MySQL服务器将二进制日志发送给目标MySQL服务器。
  3. 目标MySQL服务器读取二进制日志,并将其应用到自己的数据上。
  4. 目标MySQL服务器将更新后的数据写入自己的中继日志中。
  5. 目标MySQL服务器定期将中继日志发送给源MySQL服务器。
  6. 源MySQL服务器接收到中继日志后,将其应用到自己的数据上。

通过这种方式,源MySQL服务器和目标MySQL服务器之间的数据保持同步,实现了主从复制的功能。

具体配置流程

要配置MySQL主从复制,需要进行以下步骤:

1. 在源MySQL服务器上创建一个用于复制的用户

首先,需要在源MySQL服务器上创建一个用于复制的用户。该用户应该具有足够的权限来执行写操作,并且应该被授权访问所有需要复制的表。例如,可以创建一个名为repl的用户:


CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'repl'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;


其中,password是该用户的密码。

2. 在源MySQL服务器上配置主从复制

接下来,需要在源MySQL服务器上配置主从复制。可以通过修改my.cnf文件来实现。在my.cnf文件中添加以下内容:


[mysqld]
server-id=1 # 每个MySQL实例的唯一标识符
log-bin=mysql-bin # 二进制日志文件名前缀
binlog_do_db=database_name # 需要复制的数据库名称
relay-log=mysql-relay-bin # 中继日志文件名前缀
relay-log-index=mysql-relay-bin.index # 中继日志索引文件名前缀
log-slave-updates=1 # 允许从库更新主库的二进制日志文件名前缀为slave-updates-bin的二进制日志文件名前缀
read-only=0 # 从库是否只读模式,0表示不是只读模式,1表示只读模式
auto-increment-increment=1 # 自增列的增量值,默认为1,可以根据需要进行调整
auto-increment-offset=1 # 自增列的偏移量,默认为1,可以根据需要进行调整
transaction-write-set-extraction=XXHASH64 # 从库使用XXHASH64算法提取事务写集信息,可以提高性能和安全性,默认为NONE
expire_logs_days=7 # 自动删除过期的二进制日志文件和中继日志文件的时间间隔(天数),默认为0表示不自动删除过期的日志文件和中继日志文件,可以根据需要进行调整。