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

在my.cnf中保存更改后,确保在主服务器和从服务器上重启mysql:

service mysqld restart

这一步是为了确保主数据库的MySQL实例从与从数据库相同的数据开始。如果数据库正在运行,并且主数据库中的表正在插入和更新数据,可以使用FLUSH TABLES WITH READ LOCK命令来停止任何额外的插入到数据库,并允许所有当前事务完成。在完成第二步后,发出以下语句以使主服务器再次处理:

UNLOCK TABLES;

选项1:如果使用SQLYog作为MySQLGUI,可以使用SQLyog的‘将数据库复制到不同的主机/数据库’功能,如下所示:

选项2:或者,如果使用MySQL Workbench,使用MySQL Workbench迁移向导,如下所示:

转到主服务器的MySQL Shell:

mysql –u root –p GRANT REPLICATION SLAVE ON *.* TO 'root'@'' IDENTIFIED BY ''; FLUSH PRIVILEGES; SHOW MASTER STATUS;

SHOW MASTER STATUS命令用于显示主服务器用于日志记录的文件名和位置。注意文件和位置,因为它将用于配置从服务器。

或者,也可以在MySQL Workbench中执行SHOW MASTER STATUS命令:

转到从服务器的MySQL Shell:

mysql –u root -p CHANGE MASTER TO MASTER_HOST='', MASTER_USER='root', MASTER_PASSWORD='', MASTER_LOG_FILE='', MASTER_LOG_POS='';

用‘show master status’命令列出的文件和位置填写MASTER_LOG_FILE和MASTER_LOG_POS。

注意:此查询通知从服务器关于复制信息,例如,从哪里开始复制过程,主数据库的日志文件以及日志位置。

在从服务器的MySQLShell中,通过运行以下查询开始从:

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 service mysqld restart
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485