要在 Ubuntu 20.04 上配置 MySQL 主从同步,需要在两台服务器上进行一系列配置。以下是详细的步骤:
配置 MySQL:
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf
文件,确保以下配置已设置:
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = [NameOfYourDatabase]
其中 NameOfYourDatabase
是您想要复制的数据库名称。如果您想复制所有数据库,可以省略 binlog_do_db
行。
重启 MySQL 服务:
sudo systemctl restart mysql
创建复制用户:
登录到 MySQL:
mysql -u root -p
创建一个具有复制权限的用户:
CREATE USER 'replicator'@'%' IDENTIFIED BY 'replicaPassword';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';
FLUSH PRIVILEGES;
将 'replicaPassword'
替换为一个安全的密码。
锁定数据库(短暂):
为了获取一致的数据快照,需要锁定数据库:
FLUSH TABLES WITH READ LOCK;
记录二进制日志位置:
在 MySQL 中,运行以下命令并记下文件名和位置:
SHOW MASTER STATUS;
您会看到 File
和 Position
的值,稍后需要用到。
备份数据库:
在新的终端窗口中,使用 mysqldump
创建一个数据库的备份(确保替换 [NameOfYourDatabase]
):
mysqldump -u root -p [NameOfYourDatabase] > db_backup.sql
解锁数据库:
回到 MySQL 终端解锁表:
UNLOCK TABLES;
配置 MySQL:
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf
文件,添加或修改以下行:
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
read_only = 1
设置 read_only
确保从服务器只能读取。
重启 MySQL 服务:
sudo systemctl restart mysql
导入数据库备份:
将之前创建的数据库备份 (db_backup.sql
) 传输到从服务器,并导入:
mysql -u root -p < db_backup.sql
配置复制:
登录到 MySQL:
mysql -u root -p
使用之前记录的文件名和位置配置复制:
CHANGE MASTER TO
MASTER_HOST='172.10.12.195',
MASTER_USER='replicator',
MASTER_PASSWORD='replicaPassword',
MASTER_LOG_FILE='[RecordedFileName]',
MASTER_LOG_POS=[RecordedPosition];
将 [RecordedFileName]
和 [RecordedPosition]
替换为之前记录的值。
启动复制进程:
START SLAVE;
验证复制状态:
SHOW SLAVE STATUS\G
检查输出,确保 Slave_IO_Running
和 Slave_SQL_Running
都是 Yes
。
完成这些步骤后,从服务器应该开始从主服务器复制数据。注意,这种设置在生产环境中可能需要更多的安全和优化措施。此外,确保网络设置允许两台服务器之间的通信。