mysql8.0版本部署+日志清理+rsync备份策略

mysql安装:https://blog.csdn.net/qq_39399966/article/details/120205461

系统:centos7.9

数据库版本:mysql8.0.28

1.卸载旧的mysql,保证环境纯净

rpm -qa | grep mariadb

mariadb-5....

rpm -e --nodeps 软件

rpm -e --nodeps mariadb-5...

rpm -qa | grep -i mysql #查看是否安装过mysql

#查找mysql文件,并将其删除

find / -name mysql

whereis mysql

rm -rf 查询到的mysql路径

rm /etc/my.cnf

rpm -qa | grep -i mysql

#uname -m

arch

x86_64 #我的是x86

#拉取包,如果你是arch,下载https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-1.el7.aarch64.rpm-bundle.tar

wget https://mirrors.aliyun.com/mysql/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar

#安装依赖

yum install openssl-devel perl-Test-Simple perl-JSON.noarch perl.x86_64 perl-devel.x86_64 autoconf numactl openssl-devel.x86_64 openssl.x86_64 -y

#rpm安装顺序

#1梯队

rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-client-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-server-8.0.26-1.el7.x86_64.rpm --nodeps

#2梯队

rpm -ivh mysql-community-libs-compat-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-embedded-compat-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-devel-8.0.26-1.el7.x86_64.rpm --nodeps

rpm -ivh mysql-community-test-8.0.26-1.el7.x86_64.rpm --nodeps

#数据库初始化

mysqld --initialize --console

#目录授权

chown -R mysql:mysql /var/lib/mysql/

#启动

systemctl start mysqld && systemctl enable --now mysqld && systemctl status mysqld

#查看密码

cat /var/log/mysqld.log | grep password

#登录

mysql -u root -p

#改密码

alter USER 'root'@'localhost' IDENTIFIED BY 'W!@f2rfsdf;';

#登录授权

use mysql;

select host, user, authentication_string, plugin from user;

update user set host = "%" where user='root';

flush privileges;

#密码验证方式更改

use mysql;

alter USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'heihei3431@:';

flush privileges;

#创建用户并授权

CREATE USER 'xixi'@'%' IDENTIFIED BY 'heihei@13のqednasdo11';

GRANT ALL PRIVILEGES ON *.* TO 'xixi'@'%' WITH GRANT OPTION;

ALTER USER 'xixi'@'%' IDENTIFIED WITH mysql_native_password BY 'heihei@13のqednasdo11';

FLUSH PRIVILEGES;

UPDATE mysql.user SET authentication_string = PASSWORD('qwc@113.'), plugin = 'mysql_native_password' WHERE User = 'root' AND Host = 'localhost';

FLUSH PRIVILEGES;

----------------------mysql:热备份,清理日志数据,注意:mysql服务器需要和远程服务器是免密登录,创建公私钥,这个脚本只是实现了全备

#脚本功能:

#1.清理二进制日志binlog

#2.清理错误日志(Error Log)。

#3.清理慢查询日志(Slow Query Log)。

#4.执行全量备份。

#5.将备份文件上传到远程服务器。

前言:需要替换你的日志路径,每个人的情况不一样

yum -y install rsync

#远程服务器:

ssh-keygen -t rsa -b 2048

ssh-copy-id 150mysql

mkdir -p /store/mysql

chmod 755 /store/mysql

#mysql服务器:

ssh-keygen -t rsa -b 2048

ssh-copy-id 136node

mkdir -p /backup/{mysql,script,logs}

chmod -R 755 /backup/{mysql,script,logs}

mysql_config_editor set --login-path=backup --user=root --password #插件存储密码,用户脚本免交互登录mysql

#日志存放位置查看

mysql -uroot -p

show variables like '%log_error%'; #查看错误日志,报错查看这个日志

log-error=/var/log/mysql/error.log

show variables like '%log_bin%'; #binlog日志用于数据恢复,show variables like '%binlog_format%'; #查看binlog记录信息的方式 ROW行记录

log_bin=/var/lib/mysql/mysql-bin

SHOW VARIABLES LIKE 'slow_query_log'; #查看慢日志

/var/log/mysql/mysql-slow.log

vim /etc/my.cnf

client

sock=/data/mysql/mysql.sock

mysqld

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/var/log/mysql/error.log

pid-file=/var/run/mysqld/mysqld.pid

log_bin=/data/mysql/mysql-bin

slow_query_log = 1

slow_query_log_file = /var/log/mysql/mysql-slow.log

long_query_time = 2

sudo mkdir -p /var/log/mysql

sudo chown -R mysql:mysql /var/log/mysql

systemctl restart mysqld

---【全量备份+热备份+rsync】

root@150m01 /backup/script\]# cat auto_mysqldump.sh #!/bin/bash # 设置环境变量 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin export PATH # 获取当前日期 DATE="$(date +%F)" # 本地备份目录 local_backup_dir=/backup/mysql mkdir -p "${local_backup_dir}" # 日志文件路径 log_file="/backup/logs/mysql_backup.log" mkdir -p "$(dirname "${log_file}")" # 远程服务器信息 REMOTE_SERVER="136node" # 替换为远程服务器的IP地址或主机名 REMOTE_DIR="/store/mysql" # 替换为远程服务器的备份目录 REMOTE_SSH_PORT=22 # 替换为远程服务器的SSH端口 # MySQL配置 MYSQL_LOGIN_PATH="backup" # 使用 mysql_config_editor 设置的登录路径 SOCKET_FILE="/var/lib/mysql/mysql.sock" # MySQL 套接字文件路径 # 清理二进制日志 echo "$(date): Cleaning up binary logs..." \>\> "${log_file}" mysql --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 30 DAY;" \>\> "${log_file}" 2\>\&1 # 清理错误日志 echo "$(date): Cleaning up error log..." \>\> "${log_file}" ERROR_LOG="/var/log/mysql/error.log" if \[ -f "$ERROR_LOG" \]; then cat /dev/null \> $ERROR_LOG echo "$(date): Error log cleaned." \>\> "${log_file}" else echo "$(date): Error log not found." \>\> "${log_file}" fi # 清理慢查询日志 echo "$(date): Cleaning up slow query log..." \>\> "${log_file}" SLOW_QUERY_LOG="/var/log/mysql/mysql-slow.log" if \[ -f "$SLOW_QUERY_LOG" \]; then cat /dev/null \> $SLOW_QUERY_LOG echo "$(date): Slow query log cleaned." \>\> "${log_file}" else echo "$(date): Slow query log not found." \>\> "${log_file}" fi # 执行 MySQL 热备份 echo "$(date): Performing MySQL hot backup..." \>\> "${log_file}" mysqldump --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} --all-databases \> "${local_backup_dir}/hot_backup-${DATE}.sql" if \[ $? -eq 0 \]; then echo "$(date): MySQL hot backup completed successfully" \>\> "${log_file}" else echo "$(date): MySQL hot backup failed" \>\> "${log_file}" exit 1 fi # 使用 rsync 同步本地备份文件到远程服务器 echo "$(date): Syncing backup files to remote server using rsync..." \>\> "${log_file}" rsync -vzrtopg --progress --delete -e "ssh -p ${REMOTE_SSH_PORT}" "${local_backup_dir}/" "${REMOTE_SERVER}:${REMOTE_DIR}/" \>\> "${log_file}" 2\>\&1 if \[ $? -eq 0 \]; then echo "$(date): Backup files synced successfully" \>\> "${log_file}" else echo "$(date): Backup files sync failed" \>\> "${log_file}" exit 1 fi # 删除本地旧的备份文件(保留最近30天的备份) echo "$(date): Deleting old local backups..." \>\> "${log_file}" find "${local_backup_dir}" -name "hot_backup-\*.sql" -mtime +30 -delete if \[ $? -eq 0 \]; then echo "$(date): Old local backups deleted successfully" \>\> "${log_file}" else echo "$(date): Old local backups deletion failed" \>\> "${log_file}" fi # 在远程服务器上删除旧的备份文件(保留最近30天的备份) echo "$(date): Deleting old remote backups..." \>\> "${log_file}" ssh -p ${REMOTE_SSH_PORT} "${REMOTE_SERVER}" "find ${REMOTE_DIR} -name 'hot_backup-\*.sql' -mtime +30 -delete" \>\> "${log_file}" 2\>\&1 if \[ $? -eq 0 \]; then echo "$(date): Old remote backups deleted successfully" \>\> "${log_file}" else echo "$(date): Old remote backups deletion failed" \>\> "${log_file}" fi echo "$(date): MySQL cleanup and backup completed." \>\> "${log_file}" chmod +x auto_mysqldump.sh ----定时执行 crontab -e #\*/2 \* \* \* \* /backup/script/auto_mysqldump.sh #每两分钟同步一次,测试用 0 2 \* \* \* \* /backup/script/auto_mysqldump.sh #实际使用,每天晚上2点钟更新 ----验证查看 mysql服务器: ls /backup/mysql/ hot_backup-2025-03-31.sql 远程服务器: ls /store/mysql hot_backup-2025-03-31.sql ----删除测试 1.navicat登录mysql数据库删除一个库,例如test库。 2.还原 mysql -uroot -p source /backup/mysql/hot_backup-2025-03-31.sql ------------------------------全量+增量,两个脚本不一样,直接复制 vim auto_mysqldump.sh #!/bin/bash # 设置环境变量 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin export PATH # 获取当前日期 DATE="$(date +%F)" # 本地备份目录 local_backup_dir=/backup/mysql mkdir -p "${local_backup_dir}" # 日志文件路径 log_file="/backup/logs/mysql_backup.log" mkdir -p "$(dirname "${log_file}")" # 远程服务器信息 REMOTE_SERVER="136node" # 替换为远程服务器的IP地址或主机名 REMOTE_DIR="/store/mysql" # 替换为远程服务器的备份目录 REMOTE_SSH_PORT=22 # 替换为远程服务器的SSH端口 # MySQL配置 MYSQL_LOGIN_PATH="backup" # 使用 mysql_config_editor 设置的登录路径 SOCKET_FILE="/data/mysql/mysql.sock" # MySQL 套接字文件路径 # 清理二进制日志 echo "$(date): Cleaning up binary logs..." \>\> "${log_file}" mysql --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} -e "PURGE BINARY LOGS BEFORE NOW() - INTERVAL 30 DAY;" \>\> "${log_file}" 2\>\&1 # 清理错误日志 echo "$(date): Cleaning up error log..." \>\> "${log_file}" ERROR_LOG="/var/log/mysql/error.log" if \[ -f "$ERROR_LOG" \]; then cat /dev/null \> $ERROR_LOG echo "$(date): Error log cleaned." \>\> "${log_file}" else echo "$(date): Error log not found." \>\> "${log_file}" fi # 清理慢查询日志 echo "$(date): Cleaning up slow query log..." \>\> "${log_file}" SLOW_QUERY_LOG="/var/log/mysql/mysql-slow.log" if \[ -f "$SLOW_QUERY_LOG" \]; then cat /dev/null \> $SLOW_QUERY_LOG echo "$(date): Slow query log cleaned." \>\> "${log_file}" else echo "$(date): Slow query log not found." \>\> "${log_file}" fi # 执行 MySQL 热备份 echo "$(date): Performing MySQL hot backup..." \>\> "${log_file}" mysqldump --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} --all-databases \> "${local_backup_dir}/hot_backup-${DATE}.sql" if \[ $? -eq 0 \]; then echo "$(date): MySQL hot backup completed successfully" \>\> "${log_file}" else echo "$(date): MySQL hot backup failed" \>\> "${log_file}" exit 1 fi # 使用 rsync 同步本地备份文件到远程服务器 echo "$(date): Syncing backup files to remote server using rsync..." \>\> "${log_file}" rsync -vzrtopg --progress --delete -e "ssh -p ${REMOTE_SSH_PORT}" "${local_backup_dir}/" "${REMOTE_SERVER}:${REMOTE_DIR}/" \>\> "${log_file}" 2\>\&1 if \[ $? -eq 0 \]; then echo "$(date): Backup files synced successfully" \>\> "${log_file}" else echo "$(date): Backup files sync failed" \>\> "${log_file}" exit 1 fi # 删除本地旧的备份文件(保留最近30天的备份) echo "$(date): Deleting old local backups..." \>\> "${log_file}" find "${local_backup_dir}" -name "hot_backup-\*.sql" -mtime +30 -delete if \[ $? -eq 0 \]; then echo "$(date): Old local backups deleted successfully" \>\> "${log_file}" else echo "$(date): Old local backups deletion failed" \>\> "${log_file}" fi # 在远程服务器上删除旧的备份文件(保留最近30天的备份) echo "$(date): Deleting old remote backups..." \>\> "${log_file}" ssh -p ${REMOTE_SSH_PORT} "${REMOTE_SERVER}" "find ${REMOTE_DIR} -name 'hot_backup-\*.sql' -mtime +30 -delete" \>\> "${log_file}" 2\>\&1 if \[ $? -eq 0 \]; then echo "$(date): Old remote backups deleted successfully" \>\> "${log_file}" else echo "$(date): Old remote backups deletion failed" \>\> "${log_file}" fi # 执行 MySQL 增量备份 echo "$(date): Performing MySQL incremental backup..." \>\> "${log_file}" INCREMENTAL_BACKUP_DIR="${local_backup_dir}/incremental" mkdir -p "${INCREMENTAL_BACKUP_DIR}" # 创建增量备份目录 INCREMENTAL_BACKUP_FILE="${INCREMENTAL_BACKUP_DIR}/incremental_backup-${DATE}.sql" mysqldump --login-path=${MYSQL_LOGIN_PATH} --socket=${SOCKET_FILE} --single-transaction --master-data=2 --flush-logs --all-databases \> "${INCREMENTAL_BACKUP_FILE}" if \[ $? -eq 0 \]; then echo "$(date): MySQL incremental backup completed successfully" \>\> "${log_file}" else echo "$(date): MySQL incremental backup failed" \>\> "${log_file}" exit 1 fi # 使用 rsync 同步增量备份文件到远程服务器 echo "$(date): Syncing incremental backup files to remote server using rsync..." \>\> "${log_file}" rsync -vzrtopg --progress --delete -e "ssh -p ${REMOTE_SSH_PORT}" "${INCREMENTAL_BACKUP_DIR}/" "${REMOTE_SERVER}:${REMOTE_DIR}/incremental/" \>\> "${log_file}" 2\>\&1 if \[ $? -eq 0 \]; then echo "$(date): Incremental backup files synced successfully" \>\> "${log_file}" else echo "$(date): Incremental backup files sync failed" \>\> "${log_file}" exit 1 fi # 删除本地旧的增量备份文件(保留最近30天的备份) echo "$(date): Deleting old local incremental backups..." \>\> "${log_file}" find "${INCREMENTAL_BACKUP_DIR}" -name "incremental_backup-\*.sql" -mtime +30 -delete if \[ $? -eq 0 \]; then echo "$(date): Old local incremental backups deleted successfully" \>\> "${log_file}" else echo "$(date): Old local incremental backups deletion failed" \>\> "${log_file}" fi # 在远程服务器上删除旧的增量备份文件(保留最近30天的备份) echo "$(date): Deleting old remote incremental backups..." \>\> "${log_file}" ssh -p ${REMOTE_SSH_PORT} "${REMOTE_SERVER}" "find ${REMOTE_DIR}/incremental -name 'incremental_backup-\*.sql' -mtime +30 -delete" \>\> "${log_file}" 2\>\&1 if \[ $? -eq 0 \]; then echo "$(date): Old remote incremental backups deleted successfully" \>\> "${log_file}" else ----验证查看 mysql服务器: ls /backup/mysql/ hot_backup-2025-03-31.sql#全量文件 increxxx.sql#增量文件 远程服务器: ls /store/mysql hot_backup-2025-03-31.sql ----删除测试 1.navicat登录mysql数据库删除一个库,例如test库。 2.还原 mysql -uroot -p source /backup/mysql/hot_backup-2025-03-31.sql #先还原全量文件 假设你有多个增量备份文件,需要按时间顺序依次应用它们。例如: mysql -u root -p \< /backup/mysql/incremental/incremental_backup-2024-07-31.sql mysql -u root -p \< /backup/mysql/incremental/incremental_backup-2024-08-01.sql mysql -u root -p \< /backup/mysql/incremental/incremental_backup-2024-08-02.sql 其他:脚本错误路径:tail -f /var/spool/mail/root ================!!!!!!!!!!!!!!更换data目录,不要默认的,不然更新mysql的时候,data所有数据会被覆盖消失================= #直接把脚本粘贴上去把,免得错了 mkdir -p /data/mysql chown mysql:mysql -R /data/mysql cp -R /var/lib/mysql/\* /data/mysql/ 1.my.cnf配置文件的datadir,socket,log-bin目录也要切换为/data/mysql目录下 \[mysqld

datadir=/data/mysql

socket=/data/mysql/mysql.sock

log-error=/var/log/mysql/error.log

pid-file=/var/run/mysqld/mysqld.pid

log_bin=/data/mysql/mysql-bin

slow_query_log = 1

slow_query_log_file = /var/log/mysql/mysql-slow.log

long_query_time = 2

2.脚本里的socket路径更改/data/mysql/

SOCKET_FILE="/data/mysql/mysql.sock"

systemctl restart mysqld

#还有报错查看

tail -f /var/spool/mail/root

journalctl -xe | grep mysqld

相关推荐
还鮟2 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡4 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi004 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体
zhangphil6 小时前
Android理解onTrimMemory中ComponentCallbacks2的内存警戒水位线值
android
你过来啊你6 小时前
Android View的绘制原理详解
android
移动开发者1号9 小时前
使用 Android App Bundle 极致压缩应用体积
android·kotlin
移动开发者1号9 小时前
构建高可用线上性能监控体系:从原理到实战
android·kotlin
ii_best14 小时前
按键精灵支持安卓14、15系统,兼容64位环境开发辅助工具
android
美狐美颜sdk14 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
恋猫de小郭18 小时前
Meta 宣布加入 Kotlin 基金会,将为 Kotlin 和 Android 生态提供全新支持
android·开发语言·ios·kotlin