1. 前言
MySQL是一种常用的关系型数据库管理系统,用于管理企业或网站中的数据。MySQL的主从复制(也称为主从备份)是提高系统容错和可用性的一种有效方法。在本文中,我们将介绍如何在CentOS 7上配置MySQL 8的主从复制,以及如何设置每日定时全量备份,以保证数据的完整性和安全性。
2. 准备工作
在进行下一步之前,需要先满足以下条件:
2.1 在CentOS 7上安装MySQL 8
首先需要在CentOS 7上安装MySQL 8,可以通过以下命令完成:
sudo yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum -y install mysql-community-server
安装过程中,系统会提示你输入root密码,输入后请务必牢记。
2.2 修改MySQL配置文件
修改MySQL的配置文件/etc/my.cnf,添加如下内容:
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
这里设置了MySQL实例的唯一ID为1,开启二进制日志,格式为行级复制(ROW)。
3. 配置MySQL主从复制
3.1 创建主从备份账户
为了实现主从复制,需要创建主和从的备份账户。在MySQL中,备份账户必须拥有具体的权限,以便于备份主机上的数据。
首先,登录MySQL:
mysql -u root -p
输入root密码后,创建主从备份账户:
CREATE USER 'replication'@'%' IDENTIFIED BY 'replication_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
这里创建的账户名为“replication”,密码为“replication_password”,并对这个账户赋予了REPLICATION SLAVE权限。
3.2 配置主服务器
接下来,在主服务器上配置主从复制。将以下配置文件添加到/etc/my.cnf的[mysqld]段中:
server-id=1
log-bin=mysql-bin
binlog-format=ROW
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-do-db=test_db
这里设置了MySQL实例的唯一ID为1,开启二进制日志,格式为行级复制(ROW)。binlog-ignore-db可以忽略一些不需要备份的数据库,binlog-do-db表示需要备份的数据库名称,这里指定为test_db。
保存修改后,重启MySQL服务:
systemctl restart mysqld
3.3 配置从服务器
在从服务器上也需要进行一些配置。在/etc/my.cnf文件中添加以下内容:
server-id=2
replicate-do-db=test_db
这里设置了MySQL实例的唯一ID为2,指定需要复制的数据库为test_db。
3.4 启动MySQL主从复制
在从服务器上登录MySQL后,执行如下命令,配置从服务器和主服务器的连接:
CHANGE MASTER TO
MASTER_HOST='192.168.0.100',
MASTER_USER='replication',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
这里MASTER_HOST是主服务器的IP地址,MASTER_USER和MASTER_PASSWORD是之前创建的主从备份账户的用户名和密码。MASTER_LOG_FILE是主服务器上的二进制日志名称,MASTER_LOG_POS是主服务器上最后一个读取的二进制日志的位置。
配置完毕后,启动MySQL主从复制,执行如下命令:
START SLAVE;
这里启动MySQL从服务器的复制服务。
4. 配置每日定时全量备份
除了开启主从复制,在生产环境中定期全量备份也是非常重要的,以保证数据的完整性和安全性。在这里,我们将使用crontab命令定期备份MySQL数据。
4.1 创建MySQL备份脚本
创建一个备份脚本如下:
#!/bin/bash
# MySQL备份导出路径
backup_dir=/data/mysql_backup
date_dir=`date +%Y%m%d`
dest_dir=$backup_dir/$date_dir
log_file=$backup_dir/backup.log
# 创建备份目录
if [ ! -d $dest_dir ]
then
mkdir -p $dest_dir
fi
# 备份所有数据库
mysqldump -u root -p --all-databases --single-transaction | gzip > $dest_dir/all_databases.sql.gz
# 写入备份完成时间、备份类型、备份路径等信息
echo "backup time: $(date +%Y-%m-%d_%H:%M:%S)" >> $log_file
echo "backup type: full backup" >> $log_file
echo "backup path: $dest_dir" >> $log_file
echo "" >> $log_file
脚本会备份MySQL中的所有数据库,并将备份文件压缩到指定的备份目录中。
4.2 设置crontab定时任务
在终端中执行以下命令打开crontab编辑器:
crontab -e
在编辑窗口中添加以下内容,实现每天晚上9点执行备份脚本:
0 21 * * * /data/mysql_backup/backup.sh
这里,“0 21 * * *”表示每天的21:00执行备份脚本。
5. 总结
MySQL的主从复制和定时备份是保证数据安全性的重要手段。在本文中,我们详细介绍了如何在CentOS 7系统上配置MySQL 8的主从复制和定时全量备份。希望这篇文章对您有所帮助。