连接参数
-u
-p
-S --socket
-h --host
-P --port
--database
备份示例:
mysqldump -uabc -p'43df.com' -S /xxxx/3306/mysql.sock --databases db_a db_b >/.../xx.sql
上述示例简单有效,但锁库锁表,避免用于生产环境
可输出为定界格式文件,相关参数:--fields-terminated-by 。。。。
恢复示例:
mysql -uabc -p'43df.com' -S /xxxx/3306/mysql.sock db_b
常用参数: -? --help
--default-character-set 默认utf8
-A --all-databases
-B --databases 如果只备份一个库,可以省略,但不会有建库语句
--tables 格式:库名 表名 默认覆盖-B
-w --where 只导出符合条件的记录
-l --lock-tables 锁表,省略情况下默认开启锁表,不能写入
--single-transaction
1、导出时建立一致性快照,表对象导出在一个事物中,不锁表
2、只支持有限存储引擎(InnoDB),因为要求支持事务
3、其他连接不能进行DDL操作
-d --no-data 只导对象结构,不导数据
-t --no-create-info 不导机构不导结构
-f --force 遇到错误也执行
-F --flush-logs 执行导出前先刷新日志文件,可能触发多次刷新,如果全库导出,建议先刷新
-e --extended-insert mysql独有的insert语法,默认开启,一条insert对应多个values,效率高,非标准SQL语法;如果需要将导出的sql应用到其他数据库,需要禁用,设置参数值为false
--dump-slave 用于生成slave备份集,会将当前的二进制文件及日志记录位置也输出到sql脚本
1:输出信息包括CHANGE MASTER
2:输出信息包括CHANGE MASTER,但被注释掉
指定该参数相当于启用了--lock-all-tables,除非同时指定--single-transaction
--include-master-host-port 通常与--dump-slave参数组合使用,将会在输出中明确master和端口
--master-data 备份master,参数取值同--dump-slave
-x --lock-all-tables 导出执行期间,全库锁表,无法读写;指定了该参数则等同于禁用--single-transaction和--lock-tables
-K --disable-keys insert语句前禁用索引,数据查完后再启用,加快插入速度,默认启用
--max-allowed-packet
--net-buffer-length
--no-autocommit
-n --no-create-db 不生成建库脚本
-R --routines 导出存储过程、函数等定义好的mysql程序
--flush-privileges 导出库后执行一次权限刷新
--igore-table 不导出的表,格式:db.table 一个参数后跟一个值
-c --complete-insert 使用包括列名的完整insert语句;适用于不同库或表对象列顺序不一致情况下的数据迁移
-C --compress 压缩客户端与服务端传输的信息
自动化备份脚本(摘抄自三思的涂抹mysql)
全库备份
source /data/mysqldata/scripts/mysql_env.ini
MYSQL_USER=abcd
MYSQL_PASS=1234
DATA_PATH=/data/mysqldata/backup/mysql_full
DATA_FILE=${DATA_PATH}/dbfullbak_`date +%F`.sql.gz
LOG_FILE=${DATA_PATH}/dbfullbak_`date +%F`.log
MYSQL_PATH=/usr/local/mysql/bin
MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} -S /xxxxx/mysql.sock -A -R -x --default-character-set=utf8"
#此处最好将-x 替换为--single-transaction -l,这样对innodb不影响备份时的读写,对myisam也只锁定当前备份的表,影响较小
echo >$LOG_FILE
echo -e "========Jobs started at `date +%F' '%T' '%w`========\n" >> $LOG_FILE
echo -e "**** Executed command:${MYSQL_DUMP} | gzip > $DATA_FILE ****" >> $LOG_FILE
${MYSQL_DUMP} | gzip > $DATA_FILE
echo -e "**** Jobs finished at `date +%F' '%T' '%w`****\n" >> $LOG_FILE
echo -e "**** Backup file size: `du -sh ${DATA_FILE}`****\n" >> $LOG_FILE
echo -e "========Find and delete expired backup files ========\n" >> $LOG_FILE
for tfile in $(/usr/bin/find $DATA_PATH/ -mtime +6)
do
if [ -d $tfile ];then
rmdir $tfile
elif [ -f $tfile ];then
rm -f $tfile
fi
echo -e "-----Delete fiel: $tfile-----" >>$LOG_FILE
done
echo -e "\n===== Jobs ended at `date +%F' '%T' '%w`======\n" >>$LOG_FILE
全库分表备份
source /data/mysqldata/scripts/mysql_env.ini
MYSQL_USER=abcd
MYSQL_PASS=1234
DATA_PATH=/data/mysqldata/backup/mysql_full_bytables
##DATA_FILE=${DATA_PATH}/dbfullbak_bytables_`date +%F`.sql.gz 本脚本未用到
LOG_FILE=${DATA_PATH}/dbfullbak_bytables_`date +%F`.log
MYSQL_PATH=/usr/local/mysql/bin
MYSQL_CMD="${MYSQL_PATH}/mysql -u${MYSQL_USER} -p${MYSQL_PASS} -S /xxxxx/mysql.sock "
MYSQL_DUMP="${MYSQL_PATH}/mysqldump -u${MYSQL_USER} -p${MYSQL_PASS} -S /xxxxx/mysql.sock --single-transaction -l "
echo >$LOG_FILE
echo -e "========Jobs started at `date +%F' '%T' '%w`========\n" >> $LOG_FILE
for dbs in `${MYSQL_CMD} -e "show databases" |sed '1d' |egrep -v "information_schema|mysql|performance_schema"`
do
mkdir -p ${DATA_PATH}/${dbs}
echo -e "****Database:${dbs} backup start_time:`date +%F' '%T' '%w`****" >> $LOG_FILE
for tbls in `${MYSQL_CMD} -D ${dbs} -e "show tables" |sed '1d'`
do
echo -e "****Begin ${dbs}.${tbls} dump! start_time:`date +%F' '%T' '%w`****" >> $LOG_FILE
echo -e "**** Executed command:${MYSQL_DUMP} --tables ${dbs} ${tbls} | gzip > ${DATA_PATH}/${dbs}/${tbls}.sql.gz ****" >> $LOG_FILE
${MYSQL_DUMP} --tables ${dbs} ${tbls} | gzip > ${DATA_PATH}/${dbs}/${tbls}.sql.gz
echo -e "****End ${dbs}.${tbls} dump! stop_time:`date +%F' '%T' '%w`****" >> $LOG_FILE
done
echo -e "****Database:${dbs} backup stop_time:`date +%F' '%T' '%w`****" >> $LOG_FILE
echo -e "**** Backup file size: `du -sh ${DATA_PATH}/${dbs}`****\n" >> $LOG_FILE
done
echo -e "========Find and delete expired backup files ========\n" >> $LOG_FILE
for tfile in $(/usr/bin/find $DATA_PATH/ -mtime +6)
do
if [ -d $tfile ];then
rmdir $tfile
elif [ -f $tfile ];then
rm -f $tfile
fi
echo -e "-----Delete fiel: $tfile-----" >>$LOG_FILE
done
echo -e "\n===== Jobs ended at `date +%F' '%T' '%w`======\n" >>$LOG_FILE