在Debian/Ubuntu上,设置MySQL主从复制
Huangzhongbang
・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 "。