在Debian/Ubuntu上,设置MySQL主从复制

・4 分钟阅读

介绍

当你运行一个关键网站时,必须确保你至少有一个冗余备份服务器,这样可以确保你的数据库在实时同步,MySQL将数据库同步称为复制。这个简短教程提供了如何设置主从MySQL复制的指导。

设置主节点

编辑/etc/mysql/my.cnf以禁用IP绑定。

注释掉以下行:


bind-address = 127.0.0.1
skip-networking

通过运行以下命令为复制创建新的设置:


cat >/etc/mysql/conf.d/replication.cnf <<EOF
[mysqld]
server-id = 100
log_bin = /var/log/mysql/mysql-bin.log
binlog-do-db = YOUR_DATABASE_ONE
binlog-do-db = YOUR_DATABASE_TWO
EOF

重新启动MySQL服务器。


/etc/init.d/mysql restart

在MySQL控制台中运行以下命令,在MySQL中创建一个从用户。


CREATE USER 'slave'@'SLAVE_SERVER_IP_ADDRESS' identified by 'YOUR_SLAVE_PASSWORD';
GRANT ALL ON *.* TO 'slave'@'SLAVE_SERVER_IP_ADDRESS';
FLUSH PRIVILEGES;

现在,锁定对数据库的写访问:


FLUSH TABLES WITH READ LOCK;

获取主节点状态:

 
SHOW MASTER STATUS;

 

注意:记下"File "和"Position "字段的值,因为我们稍后需要为从节点引用它们。

打开另一个SSH会话,并且使用以下命令转储数据库:


mysqldump -u MYSQL_USERNAME -pMYSQL_PASSWORD --databases YOUR_DATABASE_ONE YOUR_DATABASE_TWO > database.sql

返回到前一个SSH会话,并在MySQL控制台中发出以下命令以解锁写入访问:

 
UNLOCK TABLES;

 

将上一步创建的database.sql传输到slave节点。

设置从node

编辑/etc/mysql/my.cnf以禁用IP绑定。

注释掉以下行:


bind-address = 127.0.0.1
skip-networking

通过运行以下命令为复制创建新的设置:


cat >/etc/mysql/conf.d/replication.cnf <<EOF
[mysqld]
server-id = 101
log_bin = /var/log/mysql/mysql-bin.log
binlog-do-db = YOUR_DATABASE_ONE
binlog-do-db = YOUR_DATABASE_TWO
EOF

重新启动MySQL服务器。


/etc/init.d/mysql restart

现在使用此命令从主node导入database.sql


mysql -u MYSQL_USERNAME-pMYSQL-PASSWORD < database.sql

现在,让我们开始复制,打开MySQL控制台,运行以下命令:


SLAVE STOP;
CHANGE MASTER TO MASTER_HOST='MASTER_SERVER_IP_ADDRESS', MASTER_USER='slave', MASTER_PASSWORD='YOUR_SLAVE_PASSWORD', MASTER_LOG_FILE='FILE_VALUE_FROM_MASTER', MASTER_LOG_POS=POSITION_VALUE_FROM_MASTER;
SLAVE START;

注意:MASTER_LOG_FILE和MASTER_LOG_POS的值是从主节点设置中记下的"File "和"Position "。

Huangzhongbang profile image