引言

MySQL主从同步是保证数据安全性和高可用性的重要机制。通过配置MySQL的主从复制,可以在主服务器上执行所有操作,同时将数据同步到从服务器上。当主服务器出现问题时,可以从从服务器接管服务。本文将详细讲解如何配置MySQL主从同步,并利用Shell脚本进行监控,以确保数据的安全与高效同步。

MySQL主从同步配置

1. 环境准备

在进行主从同步之前,确保你的MySQL服务器版本兼容,以下是配置环境的基本要求:

  • 主服务器和从服务器都应该安装MySQL。
  • 主服务器上需要开启二进制日志功能。
  • 主服务器上需要设置一个唯一的复制标识符。

2. 主服务器配置

在主服务器上,编辑my.cnf文件,添加以下配置:

[mysqld]
server-id = 1
log-bin = /var/log/mysql/binlog
binlog-format = ROW
binlog-do-db = your_database

其中server-id是主服务器的唯一标识符,log-bin指定二进制日志文件的存储位置,binlog-format指定二进制日志的格式,binlog-do-db指定需要同步的数据库名称。

3. 从服务器配置

在从服务器上,编辑my.cnf文件,添加以下配置:

[mysqld]
server-id = 2
relay-log = /var/log/mysql/relay-bin
read-only = 1

其中server-id是从服务器的唯一标识符,relay-log指定中继日志文件的存储位置,read-only表示从服务器只能执行查询操作,不能执行更新操作。

4. 主从同步设置

在主服务器上,执行以下命令,为同步设置一个唯一的复制标识符:

mysql> SET @@server_id = 1;

然后,创建一个用于同步的用户:

mysql> CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
mysql> FLUSH PRIVILEGES;

在从服务器上,执行以下命令,设置主服务器信息:

mysql> CHANGE MASTER TO
    -> MASTER_HOST='master_ip',
    -> MASTER_USER='replication_user',
    -> MASTER_PASSWORD='password',
    -> MASTER_LOG_FILE='binlog_file_name',
    -> MASTER_LOG_POS=binlog_position;

其中master_ip是主服务器的IP地址,binlog_file_namebinlog_position是主服务器上的二进制日志文件名和位置。

5. 启动同步

在从服务器上,执行以下命令,启动同步:

mysql> START SLAVE;

Shell脚本监控主从状态

为了确保主从同步的正常运行,我们可以编写Shell脚本来监控主从状态。

#!/bin/bash

# 主服务器和从服务器信息
MASTER_IP="master_ip"
SLAVE_IP="slave_ip"
USER="replication_user"
PASSWORD="password"

# 获取主服务器二进制日志位置
MASTER_LOG_FILE=$(mysql -h$MASTER_IP -u$USER -p$PASSWORD -e 'SHOW MASTER STATUS;' | awk '{print $1}' | tail -n1)
MASTER_LOG_POS=$(mysql -h$MASTER_IP -u$USER -p$PASSWORD -e 'SHOW MASTER STATUS;' | awk '{print $2}' | tail -n1)

# 获取从服务器二进制日志位置
SLAVE_LOG_FILE=$(mysql -h$SLAVE_IP -u$USER -p$PASSWORD -e 'SHOW SLAVE STATUS;' | awk '{print $5}' | tail -n1)
SLAVE_LOG_POS=$(mysql -h$SLAVE_IP -u$USER -p$PASSWORD -e 'SHOW SLAVE STATUS;' | awk '{print $6}' | tail -n1)

# 检查同步状态
if [ "$MASTER_LOG_POS" -eq "$SLAVE_LOG_POS" ]; then
    echo "主从同步正常。"
else
    echo "主从同步异常,请检查同步状态。"
fi

# 获取主从延迟
DELAY=$(mysql -h$SLAVE_IP -u$USER -p$PASSWORD -e "SELECT UNIX_TIMESTAMP(SUBTIME(NOW(),CONVERT_TZ(UNIX_TIMESTAMP(), '+00:00', @@session.time_zone))) - UNIX_TIMESTAMP(LAST_IO_OFFSET) AS delay;" | awk '{print $1}')
echo "主从延迟:$DELAY 秒。"

将上述脚本保存为monitor_mysql_replication.sh,并赋予执行权限:

chmod +x monitor_mysql_replication.sh

总结

通过配置MySQL主从同步,并使用Shell脚本来监控同步状态,可以确保数据的安全与高效同步。在实际应用中,还需要定期检查主从服务器的性能,确保系统的稳定运行。