MySQL的主从复制是一种常见的数据库复制技术,它允许将一个MySQL数据库服务器(主服务器)的数据复制到其他MySQL服务器(从服务器)。在主从复制配置中,主服务器负责接收和处理写操作,而从服务器则复制主服务器的数据,并用于读操作或备份。
主从配置需要对主服务器和从服务器的配置文件(my.cnf)进行相应的修改。下面是一个示例的主从配置文件内容解析:

主服务器(master)的my.cnf配置文件内容示例:

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = mydatabase
auto_increment_increment=2
auto_increment_offset=2
character_set_server=utf8
collation_server=utf8_general_ci
  • server-id:指定主服务器的唯一标识符,必须在主服务器和从服务器中唯一
  • log-bin:启用二进制日志,用于记录主服务器上的所有更改操作
  • binlog-do-db:指定要复制到从服务器的数据库名称,记录到二进制日志。不填写则全部记录
  • auto_increment_increment:自增值的偏移量
  • auto_increment_offset:自增值的增量
  • character_set_server:指定默认字符集
  • collation_server:指定默认校对规则

auto_increment_offset和auto_increment_increment这两个参数通常用于在MySQL复制和集群环境中避免自增值冲突的情况。在双主双从复制中,如果你有多个主服务器写入同一个表,你需要确保每个服务器生成的自增值不会发生冲突,这时候设置这两个参数就显得尤为重要。

配置双主双从复制时,通常情况下需要考虑字符编码的设置,以确保数据在不同主机之间的正确传输和存储

从服务器(slave)的my.cnf配置文件内容示例:

[mysqld]
server-id = 2
relay-log = mysql-relay-bin
replicate-do-db = mydatabase
log-slave-updates=1
master-host = 192.168.0.1
master-user = replication_user
master-password = replication_password
auto_increment_increment=2
auto_increment_offset=1
character_set_server=utf8
collation_server=utf8_general_ci
  • server-id:指定从服务器的唯一标识符,必须在主服务器和从服务器中唯一
  • relay-log:启用中继日志,用于记录从服务器接收到的主服务器的二进制日志
  • replicate-do-db:指定要复制的数据库名称,不填写则全部复制
  • log-slave-updates:启用联等备份,控制从服务器是否将复制事件记录到自己的二进制日志中
  • master-host:指定主服务器的IP地址或主机名
  • master-user:指定从服务器用于与主服务器进行身份验证的用户名
  • master-password:指定从服务器用于与主服务器进行身份验证的密码

如果在主从配置中不指定replicate-do-dbbinlog-do-db参数,将会导致所有数据库都进行复制,主服务器上的所有数据库更改操作都将被复制到从服务器,并记录在二进制日志中。从服务器将完整地复制主服务器上的所有数据库。

所以如果只想复制特定的数据库,可以在主服务器和从服务器的配置文件中使用replicate-do-db参数指定要复制的数据库名称。这样可以限制复制的范围,只复制指定的数据库。同样,使用binlog-do-db参数可以指定要记录到二进制日志的数据库名称。但是请注意如果在从库中配置了 "replicate-do-db" 选项,并且主库中已经限制了二进制日志的记录,可能会导致复制失败或数据不一致的问题。因为从库的复制过滤配置会与主库的二进制日志记录冲突。

在配置完成后,需要重启MySQL服务器使配置生效,并确保主服务器上的二进制日志和从服务器上的中继日志正常运行。

最后修改:2024 年 04 月 24 日
如果觉得我的文章对你有用,请随意赞赏