mysqldump --single-transaction --quick --triggers --routines --events --user=<用户名> --password=<密码> --host=<主机名> -B <数据库名1> <数据库名2> |gzip > backup.sql.gz
--single-transaction:使用事务来确保备份数据的一致性。
--quick:以快速模式进行备份,减少锁定时间。
--routines:备份存储过程和函数。
--triggers:备份触发器。
--events 参数用于备份 MySQL 数据库中的事件(events)
--user=<用户名>:指定用于连接到数据库的用户名。
--password=<密码>:指定连接到数据库所需的密码。请确保在命令行中使用密码时注意安全性。
--host=<主机名>:指定数据库服务器的主机名或 IP 地址。
<数据库名>:要备份的数据库的名称。
管道(|)和 gzip 命令,将备份结果压缩为 gzip 格式,以减少备份文件的大小。
backup.sql:将备份结果输出到名为 backup.sql 的文件中。您可以根据需要更改备份文件的名称和路径。
备份脚本(并发5个,同时备份五个数据库):
#!/bin/bash
# Full backup database.
db_user="*****"
db_pass="**********************"
db_host1="************************"
db_host2="************************"
db_name_1="/Data/sh/dbback/db_name_1"
db_name_2="/Data/sh/dbback/db_name_2"
bak_dir="/db_back/db_bak_sql"
date_dir="/db_back/db_bak_sql/`date -I`"
source /etc/profile
if [ ! -f $date_dir ];then
mkdir -p $date_dir
fi
echo "start_time : `date +%m-%d_%H:%M:%S`" >> $date_dir/time.txt
process=5
tmp_fifofile=/tmp/$$.fifo
mkfifo $tmp_fifofile
exec 86<>$tmp_fifofile
rm $tmp_fifofile
for i in `seq $process`
do
echo >&86
done
function dbdump() {
while read line
do
read -u 86
{
/usr/bin/mysqldump --default-character-set=utf8 --single-transaction --quick --triggers --routines --events -u$db_user -p$db_pass -h$1 $line |gzip > $date_dir/$line.sql.gz
echo >&86
}&
done < $2
wait
}
dbdump $db_host1 $db_name_1
dbdump $db_host2 $db_name_2
exec 86>&-
echo "finish_time : `date +%m-%d_%H:%M:%S`" >> $date_dir/time.txt
cd $bak_dir
tar --remove-files -czvf `date -I`.tar.gz `date -I` &>/dev/null
网友评论