如何在 CentOS 中使用 MySQL 设置主从复制





5.00/5 (7投票s)
如何在 CentOS 中使用 MySQL 设置主从复制
引言
实现主从复制(也称为镜像)对于防止数据丢失、提高性能、支持数据库备份以及作为缓解系统故障的解决方案之一非常重要。如果你的数据库服务器崩溃了,你会怎么做?
为了让你对主从复制有一个概念,想象一下有两个 MySQL 服务器实例,其中主服务器在主服务器仍在履行其职责的同时,会自动复制到从服务器。你实际上可以拥有多个从服务器。因此,如果主数据库服务器崩溃了,从服务器将拥有主服务器数据的精确副本。
MySQL 的一个有用功能是复制,MySQL 会自动将数据从一个 MySQL 实例复制到另一个实例。以防主服务器崩溃,你可以在另一台服务器上拥有数据的精确副本。
由于主从复制是单向复制(从主到从),只有主数据库用于写入操作,而读取操作可以分布在多个从数据库上。
必备组件
要设置 MySQL 主从复制,你需要两台安装了 MySQL 的不同服务器,每台服务器都有一个特定的 IP 地址。我们将这两台服务器称为主服务器和从服务器。本教程将使用 CentOS Linux 作为操作系统。
教程
在本教程中,我们将使用 CentOS Linux 作为操作系统,提供的命令适用于 CentOS。如果你想在其他操作系统上设置 MySQL 主从复制,你需要对其特定命令进行修改。但是,设置 MySQL 主从复制的一般原则对于所有操作系统都相同。
- 编辑主服务器和从服务器上的 MySQL 配置文件(my.cnf)。
以下是打开 MySQL 配置文件路径
cd /etc/my.cnf
- 编辑主服务器主配置文件
在主服务器的 my.cnf 文件中,在
[mysqld]
下插入以下内容,如果存在则替换现有内容server-id = 1 log-bin = mysql-bin binlog-ignore-db = "mysql"
请看下面的示例
注释:- ‘
server-id
’在复制中用于使主服务器和从服务器能够唯一地识别自己并建立唯一的复制 ID。 - 如果你在未使用 server-id 设置其 ID 的情况下启动主服务器,默认 ID 将为
0
。在这种情况下,主服务器拒绝从服务器的连接,从服务器也拒绝连接主服务器。 log-bin = mysql-bin
表示日志将进入 MySQL 数据目录,并将以mysql-bin
作为前缀。binlog-ignore-db
告诉主服务器不要记录列出的数据库上发生的更改。
- ‘
- 编辑从服务器主配置文件
在从服务器的 my.cnf 文件中,在
[mysqld]
下添加此项server-id=2
- 重启 MySQL
保存 my.cnf 中的更改后,请确保通过以下方式在主服务器和从服务器上都重启 MySQL:
service mysqld restart
- 编辑主服务器主配置文件
- 将主数据库复制到从服务器
此步骤是为了确保主数据库中的 MySQL 实例以与从数据库相同的数据启动。
如果你的数据库正在运行,并且主数据库中的表正在插入和更新数据,你可以使用
FLUSH TABLES WITH READ LOCK
命令停止向数据库进行任何额外的插入,并允许所有当前事务完成。完成步骤 2 后,发出以下语句以允许主服务器再次处理:UNLOCK TABLES;
选项 1:如果你将
SQLYog
作为你的 MySQL GUI,你可以使用SQLyog
中提供的“Copy Database to Different Host/Database”功能,如下所示选项 2:或者,如果你使用 MySQL Workbench,请使用 MySQL Workbench Migration Wizard,如下所示
- 配置主服务器和从服务器
- 转到主服务器的 MySQL Shell
mysql –u root –p <enter root password> GRANT REPLICATION SLAVE ON *.* TO 'root'@'<insert slave server ip address>' IDENTIFIED BY '<password>'; FLUSH PRIVILEGES; SHOW MASTER STATUS;
SHOW MASTER STATUS
命令用于显示主服务器用于日志记录的文件名和位置。记下文件和位置,因为它们将在配置从服务器时使用。或者,你也可以在 MySQL Workbench 中执行
SHOW MASTER STATUS
命令 - 转到从服务器的 MySQL Shell
mysql –u root -p <enter root password> CHANGE MASTER TO MASTER_HOST='<insert master server ip address>', MASTER_USER='root', MASTER_PASSWORD='<insert password>', MASTER_LOG_FILE='<insert master_log_file>', MASTER_LOG_POS='<insert master_log_pos>';
填写
MASTER_LOG_FILE
和MASTER_LOG_POS
,它们来自“show master status”命令中列出的文件和位置。注意:
此查询告知从服务器复制信息,例如从哪里开始复制过程、主数据库的日志文件以及日志位置。
- 转到主服务器的 MySQL Shell
- 启动复制
在从服务器的 MySQL Shell 中,只需运行此查询即可启动从服务器:
START SLAVE;
现在,检查从服务器是否正在运行:
SHOW SLAVE STATUS;
你可以直接在 MySQL Shell 或 MySQL GUI 中执行此命令。要判断复制是否正在运行,
Slave_IO_Running
和Slave_SQL_Running
都应显示“YES
”。注释:
SHOW SLAVE STATUS
显示复制过程的当前状态。如果你看到Slave_IO_Running
和Slave_SQL_Running
为“YES
”,则表示数据库复制已正确配置。- 如果你想知道从服务器与主服务器的延迟程度,请查看 Show Slave Status 输出中的
Seconds_Behind_Master
列。
提示:如果你遇到从服务器停止的情况——
Slave_IO_Running
和Slave_SQL_Running
显示“No
”,你可以在此路径找到错误:var/LOG/mysqld.log你可以通过编辑从服务器的 my.cnf 文件来跳过错误,如下所示
添加
slave-skip-error
命令后,重启 MySQLservice mysqld restart