欢迎访问宙启技术站
智能推送

五个步骤完成MySQL主从复制

发布时间:2023-05-15 02:56:11

主从复制是MySQL中常用的数据库灾备方案,它可以通过将主库的数据同步到一台或多台从库中,从而保证数据备份和数据访问的高可用性,保障了数据库系统的稳定性和可靠性。

下面通过五个步骤来演示如何在MySQL数据库中完成主从复制。

步骤一:创建主库

在安装好MySQL数据库后,首先需要在一个服务器上创建一个主库实例。这个库可以是全新的,也可以是一个已经有数据的库。

假设我们已经在主服务器上安装好了MySQL数据库,并已经创建好了一个名为testdb的数据库,我们需要对该数据库进行以下配置:

1. 设置主库的 ID

在MySQL中,每个服务器都需要有 的SERVER_ID。在主从复制中,需要为主库设置一个 的SERVER_ID,使得从库可以通过该ID来识别主库。我们可以通过编辑MySQL的配置文件my.cnf,在[mysqld]部分中添加如下配置:

server-id=1

其中1为主库的ID,可以设置为任意不重复的数字。

2. 开启二进制日志

二进制日志(binary log)是MySQL数据库中记录所有对数据的修改操作的日志文件,用于备份和复制,是实现主从复制的重要条件之一。需要通过编辑MySQL的配置文件my.cnf,在[mysqld]部分中添加如下配置:

log-bin=mysql-bin

其中mysql-bin是二进制日志的日志文件名,可以根据需要设置。

3. 创建复制账户

为了保证数据的安全性和一致性,在复制数据时需要一个复制账户。此处假设复制账户名为repl,密码为replpassword,使用以下命令创建账户:

CREATE USER 'repl'@'%' IDENTIFIED BY 'replpassword';

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

步骤二:备份主库

在设置好主库后,需要备份该库的数据用于同步到从库。在这个示例中,我们使用mysqldump命令对主库进行备份。假设我们想要备份testdb数据库,备份文件名为testdb.sql,备份过程如下:

mysqldump -uroot -p testdb > testdb.sql

此处需要输入root账户的密码,完成备份后,testdb.sql即为备份文件。

步骤三:创建从库

在备份好主库后,需要在从服务器上创建一个从库实例,并将主库的数据同步到从库。需要以下配置:

1. 设置从库的 ID

与主库一样,从库也需要具备 的SERVER_ID值。可以通过编辑my.cnf,在[mysqld]部分中添加如下配置:

server-id=2

其中2为从库的 ID,可以设置为不同于主库的任意数字。

2. 恢复主库备份

在从库创建了需要同步数据的数据库后,可以通过导入之前备份的主库数据来初始化该库,命令如下:

mysql -uroot -p < testdb.sql

此处需要输入root账户的密码,testdb.sql即为之前备份的主库数据。

步骤四:设置主从同步

在主库和从库都准备好后,需要完成主从同步的配置。主要配置包括以下几个步骤:

1. 在从库上配置复制账户信息

在从库中需要配置之前创建的复制账户信息,以便从库能够连接并得到主库中的binlog。在从库中执行以下命令:

CHANGE MASTER TO MASTER_HOST='主库IP地址',MASTER_USER='repl',MASTER_PASSWORD='replpassword',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;

其中,MASTER_HOST为主库的IP地址,MASTER_USER为复制账户名称,MASTER_PASSWORD为复制账户密码,MASTER_LOG_FILE为主库中的二进制日志名称,MASTER_LOG_POS为同步的起始位置。

可以通过SHOW MASTER STATUS命令查看主库日志的状态:

mysql> SHOW MASTER STATUS\G

*************************** 1. row ***************************

             File: mysql-bin.000001

         Position: 120

2. 启动从库的同步

在设置完从库的复制账户以后,需要启动从库的同步进程,以实现主从同步。执行以下命令:

START SLAVE;

需要注意:启动从库同步后,在原先配置文件中添加以下信息:

server-id=2

log-bin=mysql-bin

binlog-do-db=testdb

如果从库启动时未加上这部分的配置,那么SHOW SLAVE STATUS;将会一直显示如下

Last_IO_Errno: 1593

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Please check the master's UUID by running "SHOW GLOBAL VARIABLES LIKE 'SERVER UUID'" on the master, and make sure the UUID on slave's configuration file matches it.

这是因为部署了uuid检测导致,一开始可以注释掉my.cnf文件中的这部分内容。

【windows操作】

\# \=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\

\# For Windows, optionally enable uuid checking

\#\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\=\

# \#master-uuid = <uuid>

3. 检查从库状态

执行SHOW SLAVE STATUS;命令,可以查看从库状态:

mysql> SHOW SLAVE STATUS\G

通过查看状态可以了解从库同步的情况,例如,Last_IO_Errno和Last_IO_Error可以获取到从库同步时的错误信息。

通过Slave_IO_State可以查看同步状态,如下:

Slave_IO_State: Waiting for master to send event

表示从库正在等待主库发送事件。

如果同步成功,可看到:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

表示从库复制线程以及执行线程正常运行中。

步骤五:验证数据同步

在设置主从同步成功后,需要验证从库是否成功复制了主库的数据。可以通过在主库和从库中插入、修改或删除数据来测试,检查从库是否同步了这些操作。

这里我们在主库testdb库中插入一条数据:

mysql> INSERT INTO testdb.test VALUES (3, 'test3');

Query OK, 1 row affected (0.00 sec)

然后查看从库中是否成功同步:

mysql> SELECT * FROM testdb.test;

+----+-------+

| id | name  |

+----+-------+

|  1 | test1 |

|  2 | test2 |

|  3 | test3 |

+----+-------+

可以看到,从库中已成功同步了主库中的数据。

总结

主从复制是MySQL中常用的数据库灾备方案之一,它可以通过实时同步主库数据到从库来保证数据库系统的高可用性,在提高数据备份和数据访问效率方面起到了重要作用。在完成主从复制之前,需要先了解主从复制的基本原理,以及复制的限制和注意事项。通过以上五个步骤,可以顺序完成MySQL主从复制的部署和配置,实现多数据中心的数据灾备策略。