首先指定一个用户,用来进行数据库导出操作,同时添加reload,REPLICATION CLIENT,select
权限,这里为了防止表被锁住,我没有添加LOCK TABLES
权限,后面导出时需要使用 --single-transaction --master-data=2
参数 :
# mysql -uroot -p123
MySQL [(none)]> create user dumper@'127.0.0.1' IDENTIFIED BY '123';
MySQL [(none)]> grant select,REPLICATION CLIENT,reload on *.* to dumper@'127.0.0.1'
MySQL [(none)]> quit
由于数据库版本较高,修改/etc/my.cnf
,在[mysqldump]下增加导出用的账号,不建议添加在 [client] 里,那样就所有块的操作都能共享了,修改完配置文件后, 只需要执行mysqldump
脚本就可以了;备份脚本中不需要涉及用户名密码相关信息:
# vim /etc/my.cnf
...
[mysqldump]
quick
max_allowed_packet = 500M
user=dumper
password=123
...
建立导出脚本:
# vim /data/wwwroot/script/mysql-backups.sh
#!/bin/sh
# Database info
DB_USER="dumper"
DB_PASS="123"
DB_HOST="127.0.0.1"
# Database array
DB_NAME=("bdm175223664_db" "zabbix")
# Others vars
BIN_DIR="/usr/local/mysql/bin/"
BCK_DIR="/data/wwwroot/mysql-backups"
DATE=`date +%F`
# create file
mkdir $BCK_DIR/$DATE
# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
for var in ${DB_NAME[@]}
do
$BIN_DIR/mysqldump --defaults-extra-file=/etc/my.cnf --opt --single-transaction --master-data=2 -h$DB_HOST $var > $BCK_DIR/$DATE/db_$var$DATE.sql
done
这里master-data=2
表示在CHAGE MASTER语句( 在备份导出的文件里追加的二进制binlog文件的位置和名称 )前添加注释,这个参数会--lock-all-tables
锁表,除非你指定了--single-transaction
( 以事务的形式执行 ),这样锁表就只会在dump开始的时候持续一小段时间了,不过还是不建议在dump的时候做什么操作。
建立定时清理脚本:
# vim /data/wwwroot/script/mysql-backups-clean.sh
find /data/wwwroot/mysql-backups -mtime +30 -name "*.*" -exec rm -Rf {} \;
添加进crontab,定时执行
# crontab -e
30 0 * * 6 /data/wwwroot/script/mysql-backups.sh > /dev/null
50 0 * * 6 /data/wwwroot/script/mysql-backups-clean.sh > /dev/null
发表评论