在数据库服务器崩溃时,如何保证数据的安全和系统的稳定性是一个重要的问题。主从复制是一种有效的解决方案,它允许数据从一个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"
示例如下:
注意:
编辑从服务器的主配置文件。在从服务器的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