mysql主从复制配置

MySQL的主从复制是一种常见的数据库高可用性和数据备份方案,通过将主数据库(Master)的变更同步到从数据库(Slave),实现数据的实时或近实时复制。


2cfb5405863a0c4ca6e8a4b7d7ea6800.png

1.mysql安装

  • pass

2.配置主服务器(Master)

2.1my.cnf

[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-do-db = your_database_name  # 只复制特定数据库
binlog_format = ROW        # 可选,推荐使用ROW格式,数据一致性更好

or

[mysqld]
server-id = 1         
log-bin = mysql-bin     
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2     
auto-increment-offset = 1    
slave-skip-errors = all   

2.2重启 MySQL 服务:

sudo service mysql restart

2.3创建复制用户:

1
2
3
4
5
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';

GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';

FLUSH PRIVILEGES;

or

1
2
3
grant replication slave,replication client on *.* to xxx@'100.7.32.%' identified by "xxx";

flush privileges;

此新建sql,也需要在从节点执行。

2.4获取二进制日志文件名和位置:

mysql> flush tables with read lock;  

show master status;
SHOW MASTER STATUS;

unlock tables;     //解锁

从节点从这个pos位开始复制数据,之前的数据要dump导入从库。

3.配置从服务器(Slave)

3.1 my.cnf

[mysqld]
server-id = 2
relay-log = mysql-relay-bin

or

[mysqld]
server-id = 2              # 唯一标识,不能与主库重复
relay_log = relay-log      # 可选,指定中继日志
read_only = 1              # 可选,防止从库被写入

or

[mysqld]
server-id = 2        
log-bin = mysql-bin    
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2     
auto-increment-offset = 2    
slave-skip-errors = all

3.2重启 MySQL 服务

sudo service mysql restart

3.3设置从服务器连接到主服务器:

1
2
3
4
5
6
7
8
9
10
11
12
13
CHANGE MASTER TO
MASTER_HOST='master_host_ip',
MASTER_USER='replica_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001', # 从主服务器获取的日志文件名
MASTER_LOG_POS= 123; # 从主服务器获取的日志位置

CHANGE MASTER TO
MASTER_HOST = '主库IP地址',
MASTER_USER = 'repl_user',
MASTER_PASSWORD = 'your_password',
MASTER_LOG_FILE = 'mysql-bin.000001', # 主库SHOW MASTER STATUS中的File
MASTER_LOG_POS = 123456; # 主库SHOW MASTER STATUS中的Position

3.4启动复制:

START SLAVE;

3.5验证复制状态

检查从服务器状态:

SHOW SLAVE STATUS\G;
show slave status \G;

确保Slave_IO_Running和Slave_SQL_Running 都显示为Yes

4. 常见问题排查

  • 权限问题:确保复制用户有足够的权限。
  • 网络问题:检查主从服务器之间的网络连接。
  • 配置问题:确保 server-id 唯一且正确配置。