mysqldump备份脚本、命令(用于innodb不锁表)

2023-06-27  本文已影响0人  夜清溟

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 
上一篇下一篇

猜你喜欢

热点阅读