mysqldump 備份表結構及數據


 

http://imysql.cn/mysql_backup_and_recover

一 備份與恢復案例
1.備份數據庫(全部是innodb,備份所有DB 使用 -A)
mysqldump -uroot -p --master-data=2 --single-transaction --hex-blob -E -R --triggers -B testdb >/download/testdb.sql

案例
# cat dbbackup_dump.sh
#!/bin/bash
dbdirs=/home/backup_dump
dbname=NodeServiceDB
# dblog=$dbname-$(date +%Y%m%d%H%M).log
dbbak=$dbname-$(date +%Y%m%d%H%M).sql.gz
#mysqldump -uroot -p --master-data=2 --single-transaction --hex-blob -E -R --triggers -B $dbname |gzip> $dbdirs/$dbbak
/home/mysql/bin/mysqldump -uroot -p*** --hex-blob -E -R --triggers -q -B $dbname |gzip> $dbdirs/$dbbak

## job status ##
if [ "$?" == 0 ];then
mysql -u root -p*** -hlocalhost << EOF
use MysqlCenter;
INSERT INTO MysqlCenter.job_status(jobname,status)
SELECT "30 6 * * * /home/backup_dump/dbbackup_dump.sh" AS jobname,"SUCCESS" AS status ;
EOF
else
mysql -u root -p*** -hlocalhost << EOF
use MysqlCenter;
INSERT INTO MysqlCenter.job_status(jobname,status)
SELECT "30 6 * * * /home/backup_dump/dbbackup_dump.sh" AS jobname,"FAIL" AS status ;
EOF
fi

find /home/backup_dump/ -name '*.sql.gz' -mtime +10 -exec rm {} \;
# gunzip testdb.sql.gz

加上for循環備份數據庫
# cat dbbackup_dump.sh
#!/bin/bash
dbdirs=/home/backup_dump
dbname="NodeServiceDB"
for db in $dbname ;do
dbbak=$db-$(date +%Y%m%d%H%M).sql.gz
#mysqldump -uroot -p --master-data=2 --single-transaction --hex-blob -E -R --triggers -B $dbname |gzip> $dbdirs/$dbbak
/home/mysql/bin/mysqldump -uroot -p*** --hex-blob -E -R --triggers -q -B $db |gzip -c > $dbdirs/$dbbak
done

## job status ##
if [ "$?" == 0 ];then
mysql -u root -p*** -hlocalhost << EOF
use MysqlCenter;
INSERT INTO MysqlCenter.job_status(jobname,status)
SELECT "30 6 * * * /home/backup_dump/dbbackup_dump.sh 2>/home/backup_dump/mysqldump.log" AS jobname,"SUCCESS" AS status ;
EOF
else
mysql -u root -p*** -hlocalhost << EOF
use MysqlCenter;
INSERT INTO MysqlCenter.job_status(jobname,status)
SELECT "30 6 * * * /home/backup_dump/dbbackup_dump.sh 2>/home/backup_dump/mysqldump.log" AS jobname,"FAIL" AS status ;
EOF
fi

find /home/backup_dump/ -name '*.sql.gz' -mtime +10 -exec rm {} \;
# gunzip testdb.sql.gz

加上for循環單獨備份數據庫中的每個表

壓縮備份
mysqldump -uroot -p --master-data=2 --single-transaction --hex-blob -E -R --triggers -B school |gzip>/tmp/school.sql.gz
解壓:
gunzip /tmp/school.sql.gz

參數含義:
--master-data=2 代表備份時刻記錄master的Binlog位置和Position
--single-transaction 獲取一致性快照
-R 備份存儲過程和函數
--triggres 備份觸發器
-E 備份事件
--hex-blob 使用十六進制格式導出二進制字符串字段。如果有二進制數據就必須使用本選項。
影響到的字段類型有 BINARY、VARBINARY、BLOB。


2.還原壓縮備份
# mysql -uroot -p testdb < /download/testdb.sql

導入數據,一邊解壓一邊執行sql語句
# gunzip -fc </download/testdb.sql.gz |mysql -uroot -p123456 testdb
參數含義:
-c, --stdout write on standard output, keep original files unchanged
-f, --force force overwrite of output file and compress links

mysqldump -uroot -p -h127.0.0.1 -P3306 --single-transaction --master-data=2 testdb | pv -q -L 10M |gzip > /tmp/testdb.gzip
pv:限流

二 恢復完備+binlog
# mysql -uroot testdb </backup/testdb_20150418.bak

恢復日志
mysqlbinlog --start-position="120" --stop-position="610" /var/lib/mysql/centos3-bin.000010 |mysql -uroot -p testdb

恢復日志(基於時間點)
# mysqlbinlog --stop-date="2014-05-29 13:45" /app/db_log/master23-bin.000022 |mysql -uroot -p testdb
# mysqlbinlog --start-date="2014-05-29 13:50" /app/db_log/master23-bin.000022 |mysql -uroot -p testdb

或者,先導出日志數據,然后基於位置找恢復點
# mysqlbinlog --start-date="2014-05-29 13:45" --stop-date="2014-05-29 13:50" /app/db_log/master23-bin.000022 > /tmp/mysql_restore.sql
恢復日志(基於位置 at)
# mysqlbinlog --stop-position="351" /app/db_log/master23-bin.000022 |mysql -uroot -p hangdb
# mysqlbinlog --start-position="495" /app/db_log/master23-bin.000022 |mysql -uroot -p hangdb

 

二 其他導出方式

--導出表結構,視圖結構,函數,存儲過程,觸發器,事件,不導出數據

mysqldump -u root -p -d -R --triggers -E cloudalarm > /download/cloudalarm_structure_sql.sql

--單獨備份某個表結構及數據
mysqldump -c cloudalarm t_alarm_sectorinfo2 -u root -p > /download/t_alarm_sectorinfo2.sql

metastore

/apps/svr/mysql57/bin/mysqldump -uroot -p --skip-add-drop-table -d -R --triggers -E metastore --set-gtid-purged=OFF -S /tmp/mysql3306.sock > /apps/dbchange/20180727/metastore_structure.sql

 

導出所有過程,函數,事件,觸發器(不要表和數據)
/apps/svr/mysql57/bin/mysqldump -f -Rtdn --triggers -E -uroot -p -A -S /tmp/mysql3306.sock > procedure.sql

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM