本文将介绍通过两种方式增加MySql从库,而不需要停止MySql主服务。两种方式分别为基于GTID的复制和基于数据库备份的复制。
1. 基于GTID的复制
GTID是MySQL从5.6版本中引入的特性,用于在主从复制环境中解决多主复制冲突的问题。在增加从库时,使用GTID能够避免重复数据问题。
1.1 步骤一:启用GTID
在MySQL主服务器上,编辑my.cnf文件,打开GTID模式:
[mysqld]
server-id=1
log-bin=master
binlog-format=ROW
enforce-gtid-consistency=ON
在从服务器的my.cnf文件中添加如下记录
[mysqld]
server-id=102
log-bin=slave
relay-log=replay
binlog-format=ROW
gtid_mode=ON
enforce-gtid-consistency=ON
1.2 步骤二:转储主服务器状态
通过在主服务器上使用mysqldump 转储数据,然后恢复到从服务器
$ mysqldump --master-data=2 --single-transaction --routines --triggers --all-databases --triggers --events --add-drop-database > dumping.sql
转储期间,--master-data=2 将在转储日志开头加入 CHANGE MASTER 语句,而且将包含 GTID_PURGED。
1.3 步骤三:运行 CHANGE MASTER 命令
在从服务器上,运行如下语句,建立Slave主从关系:
$ mysql -u root -p
mysql> change master to
master_host='192.168.100.101',
master_user='slaveuser',
master_password='slavepass',
master_port=3306,
master_auto_position=1;
然后启动该从服务器作为Slave:
mysql> start slave;
1.4 步骤四:验证复制是否成功
可以使用如下命令在主从服务器上验证:
mysql> show master status\G
在主服务器上这个命令可能会输出如下信息:
File: mysql-bin.000001
Position: 107
Binlog_Do_DB: mydb
Binlog_Ignore_DB: mysql
Executed_Gtid_Set: 0c5e1ca8-c195-11e7-a99b-005056a205be:1-3
在从服务器上,可以使用如下命令验证复制是否成功:
mysql> show slave status\G
可以查看输出中的Slave_IO_Running 和 Slave_SQL_Running 状态是否正常
2. 基于数据库备份的复制
还可以通过数据库备份增加从服务器。优点是操作简单,缺点是需要从主服务器上停止备份。
2.1 步骤一:停止主服务器
停止MySql主机服务,使用mysqldump命令对主数据库进行备份
$ mysqldump -u root -p mydb > mydbdump.sql
2.2 步骤二:将备份文件拷贝到从服务器
使用SCP或其他方式将备份文件从主服务器拷贝到从服务器上。
$ scp mydbdump.sql slave-server:/home/user
2.3 步骤三:恢复数据
在从服务器上,使用MySQL命令行客户端来恢复备份数据:
$ mysql -u root -p < mydbdump.sql
2.4 步骤四:启动Slave MySQL服务器
恢复完成后,在从服务器上启动Slave MySQL服务器:
$ mysql -u root -p
mysql> start slave;
2.5 步骤五:验证复制是否成功
可以使用如下命令在主从服务器上验证:
mysql> show master status\G
在主服务器上这个命令可能会输出如下信息:
File: mysql-bin.000001
Position: 107
Binlog_Do_DB: mydb
Binlog_Ignore_DB: mysql
Executed_Gtid_Set: 0c5e1ca8-c195-11e7-a99b-005056a205be:1-3
在从服务器上,可以使用如下命令验证复制是否成功:
mysql> show slave status\G
可以查看输出中的Slave_IO_Running 和 Slave_SQL_Running 状态是否正常
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:通过两种方式增加从库——不停止mysql服务 - Python技术站