MySQL主从复制

配置主从复制的前提,是主从两个MySQL版本号最好一致。然后我们来看看如何配置:

  • 修改主数据库配置文件my.cnf(or my.ini)

    开启二进制日志 设置server_id=1 重启主服务器MySQL服务

  • 修改从数据库配置文件my.cnf(or my.ini)

    设置server_id=2 重启从服务器MySQL服务

  • 在主数据库新建一个用来复制的用户(下划线处可自定义)

1
2
CREATE USER 'repl'@'%(此处也可定义为自己的从服务器IP)'IDENTIFIED BY 'slavepass';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  • 在新建数据快照或者开启复制进程之前,需要定位主服务器二进制日志的坐标
1
2
mysql> FLUSH TABLES WITH READ LOCK; --对于InnoDB表,该操作还会锁定commit操作
mysql> SHOW MASTER STATUS; --记录file和position的值。这条命令最好新建一个会话再执行。
  • 若你的主数据库已经存有数据,并且你希望从服务器同步这些数据。那么你需要新建一个数据快照。一般新建数据快照的方式有两种:MySQLdump;直接拷贝数据文件。
1
shell> mysqldump --all-databases --master-data > dbdump.db --该事例表示将所有数据库导出到一个名为dbdump.db的文件中,附加的 --master-data命令,官方文档解释了一大堆,看着似懂非懂,反正都加上吧-。- 如果你的数据库比较大,那么将原始数据文件直接复制到从服务器比使用mysqldump要效率很多。
  • 解锁主数据库
1
mysql> UNLOCK TABLES;
  • 将主数据库的dump出的文件导入到从服务器
1
shell> mysql < dbdump.db
  • 在从服务器开启复制进程
1
2
3
4
5
6
7
8
9
mysql> START SLAVE; --一般情况下是启动不了的,必须先change master to
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
mysql> START SLAVE;
mysql> show slave status \G --检查Slave_IO_Running以及Slave_SQL_Running,如果都为yes则主从复制配置成功。若不成功,该命令可以看到相关报错。