mysql 备份命令
mysql 备份常用备份命令整理
mysql 常用备份命令
# 备份单个数据库
mysqldump -u root -p database_name > database_backup.sql
# 备份多个数据库
mysqldump -u root -p --databases database1 database2 > multiple_databases.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases.sql
# 备份时排除某些表
mysqldump -u root -p database_name --ignore-table=database_name.table1 --ignore-table=database_name.table2 > backup.sql
# 备份时使用压缩
mysqldump -u root -p database_name | gzip > database_backup.sql.gz
# 备份时设置 GTID
# 注意:GTID 备份需要在支持 GTID 的 MySQL 版本中
# 这样生成的备份文件不会包含GTID信息,可以避免导入时的冲突
mysqldump --set-gtid-purged=OFF -u username -p database_name > backup.sql
备份 k8s 上的 MySQL
# 以下为备份脚本,mysql_backup.sh,内容如下
#!/bin/bash
#将k8s-mysql数据备份到主机的指定目录下
# 设置数据库实例名称和信息
NS=istorm-one-base
DB_USER="root"
DB_PASS="password"
DB_INSTANCE_NAME=$(kubectl -n $NS get po | awk '{print $1}' | grep mysql)
DBS=$(kubectl -n $NS exec $DB_INSTANCE_NAME -- sh -c 'mysql -u'$DB_USER' -p'$DB_PASS' -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)"')
#创建备份目录
mkdir -p /opt/mysql_bak/$(date +"%Y-%m-%d")_backup_sql
SQL_DATA="/opt/mysql_bak/$(date +"%Y-%m-%d")_backup_sql"
# 遍历备份每个数据库
for db_name in $DBS
do
# 备份数据库
echo "Backing up database ===========>>> $db_name"
kubectl -n $NS exec $DB_INSTANCE_NAME -- sh -c 'mysqldump -u'$DB_USER' -p'$DB_PASS' '$db_name' > /tmp/'$db_name'-backup.sql' > /dev/null
# 将备份文件拷贝到本地
kubectl -n $NS cp $DB_INSTANCE_NAME:/tmp/$db_name-backup.sql $SQL_DATA/$db_name.sql > /dev/null
# 清理数据库实例中的备份文件
kubectl -n $NS exec $DB_INSTANCE_NAME -- sh -c 'rm /tmp/'$db_name'-backup.sql'
done
echo -e "\033[41;37m -------------备份完成,请查看$SQL_DATA目录------------- \033[0m"
恢复 k8s 上的 MySQL
# 以下为恢复脚本,mysql_restore.sh,内容如下
#!/bin/bash
#将主机的指定目录下的k8s-mysql数据恢复到k8s上
# 设置数据库实例名称和信息
NS=cnbr-server
DB_USER="root"
DB_PASS="password"
DB_INSTANCE_NAME=$(kubectl -n $NS get po | awk '{print $1}' | grep mysql-cluster-mysql-0)
# 恢复指定目录下的备份文件
TIME_STAMP=$(date +"%Y-%m-%d")
DB_BACKUP_DIR="/opt/mysql_bak/${TIME_STAMP}_backup_sql"
# 建库、拷贝文件、导入数据
for db_file in $(ls $DB_BACKUP_DIR);do
db_name=$(echo $db_file | awk -F'.' '{print $1}')
echo "Restoring database ===========>>> $db_name"
db_file=$(basename $db_file)
db_path=${DB_BACKUP_DIR}/${db_file}
# 创建数据库
kubectl -n $NS exec $DB_INSTANCE_NAME -c mysql -- sh -c "mysql -u$DB_USER -p$DB_PASS -e \"CREATE DATABASE IF NOT EXISTS ${db_name};\""
# 将备份文件拷贝到容器中
kubectl -n $NS cp ${db_path} $DB_INSTANCE_NAME:/tmp/$db_file -c mysql > /dev/null
# 导入数据
kubectl -n $NS exec $DB_INSTANCE_NAME -c mysql -- sh -c "mysql -u${DB_USER} -p${DB_PASS} ${db_name} < /tmp/${db_file}
# 清理容器中的备份文件
# kubectl -n $NS exec $DB_INSTANCE_NAME -- sh -c 'rm /tmp/'$db_file
done
echo -e "\033[41;37m -------------恢复完成------------- \033[0m"
···