在 Ubuntu 22.04 上配置 MySQL 数据库同步(主从复制)
这篇教程我将带领大家在 Ubuntu 22.04 上配置 MySQL 数据库的同步,实现 MySQL 数据库一主一从复制,我们将采用 GTID 模式进行配置。
GTID(Global Transaction Identifier,全球事务标识符)模式是 MySQL 5.6 引入的一个重要特性,相比传统的基于日志位置的复制方式,GTID 模式具有以下优点:
简化复制配置:GTID 模式不需要手动记录二进制日志的文件名和位置,复制配置更加简洁。
事务一致性:每个事务都有唯一的 GTID,能够确保主从服务器之间的事务一致性。
自动故障转移:当主服务器发生故障时,可以更容易地选择新的主服务器并自动恢复复制。
避免数据丢失:GTID 模式避免了传统复制中可能出现的数据丢失问题,确保主从之间的同步更为可靠。
1. 在主从服务器上分别安装 MySQL
首先,更新系统并安装 MySQL 服务:
sudo apt update sudo apt upgrade -y sudo apt install mysql-server mysql-client
安装完毕后,你可以通过以下命令查看 MySQL 的版本:
mysql -V
2. 主服务器配置
主服务器是所有数据写入的地方,以下是配置主服务器的步骤。
2.1 编辑 MySQL 配置文件
打开 MySQL 配置文件进行修改:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 部分添加或修改以下设置:
[mysqld] server-id=1 # 主服务器唯一 ID log-bin=mysql-bin # 启用二进制日志 gtid_mode=ON # 启用 GTID 模式 enforce-gtid-consistency=ON # 强制 GTID 一致性 log-slave-updates=ON # 允许从库更新记录到 binlog binlog-format=ROW # 使用行格式的 binlog(推荐) binlog_expire_logs_seconds=604800 # 设置 binlog 的过期时间为 7 天 innodb_buffer_pool_size=6G # 设置 InnoDB 存储引擎的缓冲池大小,建议设置为服务器总内存的 50%-70% binlog-do-db=mydatabase # 仅记录指定数据库的操作到 binlog bind-address=0.0.0.0 # 允许外部连接
2.2 重启 MySQL 服务
配置完成后,重启 MySQL 服务以使设置生效:
sudo systemctl restart mysql
2.3 创建复制用户
登录 MySQL,并创建用于复制的用户:
mysql -u root -p
在 MySQL 中执行以下命令:
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'; FLUSH PRIVILEGES;
3. 从服务器配置
从服务器将从主服务器接收数据并进行同步,以下是配置从服务器的步骤。
3.1 编辑 MySQL 配置文件
打开从服务器的 MySQL 配置文件并进行修改:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在 [mysqld] 部分添加或修改以下设置:
[mysqld] server-id=2 # 从服务器唯一 ID log-bin=mysql-bin # 启用二进制日志 gtid_mode=ON # 启用 GTID 模式 enforce-gtid-consistency=ON # 强制 GTID 一致性 log-slave-updates=ON # 允许从库更新记录到 binlog binlog-format=ROW # 使用行格式的 binlog binlog_expire_logs_seconds=604800 # 设置 binlog 的过期时间为 7 天 relay_log=relay-bin # 设置中继日志 relay_log_recovery=ON # 启用中继日志恢复 binlog-do-db=mydatabase # 仅记录指定数据库的操作到 binlog
3.2 重启 MySQL 服务
配置完成后,重启 MySQL 服务以使设置生效:
sudo systemctl restart mysql
3.3 配置复制
登录 MySQL,并配置从服务器的复制:
mysql -u root -p
停止当前的复制任务(如果有):
STOP SLAVE;
配置从服务器复制任务,使用主服务器的 IP、复制用户和密码,并启用 GTID 自动定位:
CHANGE MASTER TO MASTER_HOST='master_server_ip', MASTER_USER='slave', MASTER_PASSWORD='your_password', MASTER_AUTO_POSITION=1; # 启用 GTID 自动定位
3.4 启动复制
启动复制任务:
START SLAVE;
3.5 检查复制状态
使用以下命令检查复制状态,确保以下两项为 Yes:
SHOW SLAVE STATUS\G; ..... Slave_IO_Running: Yes Slave_SQL_Running: Yes .....
4. 数据同步验证
在主服务器上创建需要同步的数据库:
mysql -uroot -p CREATE DATABASE mydatabase;
在从服务器上验证数据库是否同步:
mysql -uroot -p SHOW DATABASES;
5. 防火墙配置(以 UFW 为例)
配置主服务器的防火墙仅允许从服务器通过 3306 端口连接到主服务器。修改主服务器的防火墙配置:
sudo ufw allow from <slave_ip> to any port 3306 proto tcp
UFW 的详细使用方法请参考:https://hicairo.com/post/80.html
6. 备份与恢复
6.1 在主服务器上备份数据库
使用 mysqldump 备份数据库:
mysqldump -uroot -p --set-gtid-purged=ON mydatabase > mydatabase.sql
6.2 在从服务器上恢复数据库
使用 scp 将备份的数据库下载到从服务器:
scp root@master_server_ip:/root/mydatabase.sql ./
在从服务器上恢复数据库:
mysql -uroot -p mydatabase < mydatabase.sql
本文出处:HiFeng's Blog
本文链接:https://hicairo.com/post/81.html
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA许可协议。转载请注明出处!
<< 上一篇