生產(chǎn)MySQLdump參數(shù)
創(chuàng)新互聯(lián)公司專注于西鄉(xiāng)網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供西鄉(xiāng)營銷型網(wǎng)站建設,西鄉(xiāng)網(wǎng)站制作、西鄉(xiāng)網(wǎng)頁設計、西鄉(xiāng)網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務,打造西鄉(xiāng)網(wǎng)絡公司原創(chuàng)品牌,更為您提供西鄉(xiāng)網(wǎng)站排名全網(wǎng)營銷落地服務。
mysqldump -uroot '-pxx' -q --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs --socket=mysql.sock --set-gtid-purged=OFF
mysqldump 備份參數(shù)
接下來就是具體的解決步驟,首先備份數(shù)據(jù)。備份時不加 –master-data 參數(shù)和 –single-transaction。究其原因,–master-data 禁用 –lock-tables 參數(shù),在和 –single-transaction 一起使用時會禁用 –lock-all-tables。在備份開始時,會獲取全局 read lock。 –single-transaction 參數(shù)設置默認級別為 REPEATABLE READ,并且在開始備份時執(zhí)行 START TRANSACTION。在備份期間, 其他連接不能執(zhí)行如下語句:ALTER TABLE、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE。MySQL 同步夯住,如果加了上述參數(shù),mysqldump 也會夯住。mysqldump 會 FLUSH TABLES、LOCK TABLES,如果有 –master-data 參數(shù),會導致 Waiting for table flush。同樣,有 –single-transaction 參數(shù),仍然會導致 Waiting for table flush。另外,還可以看到 Waiting for table metadata lock,此時做了 DROP TABLE 的操作。此時可以停掉 MySQL 同步來避免這個問題。
參考oldbody
全庫備份
#!/bin/bash
#mysqldump to fully backup mysql data
if [ -f /root/.bash_profile ];then
source /root/.bash_profile
fi
BakDir=/opt/mysqlbak/full
LogFile=/opt/mysqlbak/full/bak.log
Date=`date +%Y%m%d`
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
cd $BakDir
DumpFile=$Date.sql
GZDumpFile=$Date.sql.tgz
mysqldump -uroot -p'xxxxxx' --all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs --socket=/opt/3306/mysql.sock --set-gtid-purged=OFF > $DumpFile
tar zcvf $GZDumpFile $DumpFile
if [ -f $DumpFile ];then
rm -rf $DumpFile
fi
Last=`date +"%Y年%m月%d日 %H:%M:%S"`
echo 開始:$Begin 結束:$Last $GZDumpFile succ >> $LogFile
sleep 1
find /opt/mysqlbak/full -name "*.tgz" -mtime +3 -exec rm -rf {} \;
分庫備份
#!/bin/bash
if [ -f /root/.bash_profile ];then
source /root/.bash_profile
fi
MysqlUser=root
PassWord='xxxxxx'
Port=3306
Socket="/opt/$Port/mysql.sock"
MysqlCmd="mysql -u$MysqlUser -p$PassWord -S $Socket"
Database=`$MysqlCmd -e "show databases;"|egrep -v "Database|_schema|mysql"`
MysqlDump="mysqldump -u$MysqlUser -p$PassWord -S $Socket"
#IP=`ifconfig eth0|awk -F "[:]+" 'NR==2 {print $4}'`
BackupDir=/opt/mysqlbak/fenku
LogFile=/opt/mysqlbak/fenku/bak.log
Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
[ -d $BackupDir ] || mkdir -p$BackupDir
for dbname in $Database
do
$MysqlDump --events --set-gtid-purged=OFF -B $dbname|gzip>/$BackupDir/${dbname}_$(date +%F)_bak.sql.gz
done
Last=`date +"%Y年%m月%d日 %H:%M:%S"`
echo 開始:$Begin 結束:$Last $GZDumpFile succ >> $LogFile
sleep 1
find /opt/mysqlbak/fenku -name "*.gz" -mtime +3 -exec rm -rf {} \;
還原
單個還原
mysqldump備份中恢復單張表
mysql -uroot -pMANAGER erp --one-database <dump.sql
SELECT TABLE_NAME,TABLE_ROWS,DATA_LENGTH/1024/1024 "DATA_LENGTH",CREATE_TIME,TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'xx' ORDER BY TABLE_ROWS DESC;
看DATA_LENGTH大小是否一致
pt工具檢測
pt-table-checksum是一個在線驗證主從數(shù)據(jù)一致性的工具,主要用于以下場景:
1. 數(shù)據(jù)遷移前后,進行數(shù)據(jù)一致性檢查
2. 當主從復制出現(xiàn)問題,待修復完成后,對主從數(shù)據(jù)進行一致性檢查
3. 把從庫當成主庫,進行數(shù)據(jù)更新,產(chǎn)生了"臟數(shù)據(jù)"
4. 定期校驗
pt-table-checksum 使用注意
默認當數(shù)據(jù)庫有25個以上的并發(fā)查詢時,pt-table-checksum會暫停??梢栽O置 --max-load 選項來設置這個閥值
當用 Ctrl+C 停止任務后,工具會正常的完成當前 chunk 檢測,下次使用 --resume 選項啟動可以恢復繼續(xù)下一個 chunk
utf8
# pt-table-sync --execute --replicate \
test.checksums --charset=utf8 \
--sync-to-master h=192.168.1.207,P=3306,u=root,p=123456
1,在恢復數(shù)據(jù)的時候有出來過只能恢復部份從庫的情況,我的操作方法是把輸出的語句保存在一個文本里面,然后直接貼到?jīng)]有正?;謴偷膹膸烊?zhí)行。
2,--chunk-size-limit默認設置為2,當遇到行數(shù)多的大表時pt-table-checksum可能會跳過不檢測,提示:
Skipping table db.table because on the master it would be checksummed in one chunk but on these replicas it has too many rows:
355085 rows on asddb.xxx
The current chunk size limit is 239358 rows (chunk size=119679 * chunk size limit=2.0).
此時可以根據(jù)輸出的提示將--chunk-size-limit適當調(diào)大一點。
slave
show slave status\G;
master
show slave hosts;
show variables like 'ENFORCE_GTID_CONSISTENCY';
show global variables like '%gtid_mode%';
set @@global.gtid_mode = off_permissive;
set @@global.enforce_gtid_consistency = on;
autocommit=1
yum -y install perl-Time-HiRes perl-DBI perl-DBD-MySQL
percona-toolkit-2.2.18.tar.gz
make && make install
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'USER'@'MASTER_HOST' identified by 'PASSWORD';
SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') FROM information_schema.tables WHERE table_schema='xx'
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO 'checksums'@'masterip' IDENTIFIED BY 'xx';
grant all on test.* to 'checksums'@'masterip' IDENTIFIED BY 'xx';
PTDEBUG=1 /usr/local/bin/pt-table-sync --replicate=test.checksums --recursion-method=processlist -d xx --tables=pub_dditem --port=3306 h='172.29.12.197',u='checksums',p='MANAGER' --print --execute
pt-table-sync 使用注意
1.采用replace into來修復主從不一致,必須保證被replace的表上有主鍵或唯一鍵,否則replace into退化成insert into,起不到修復的效果。這種情況下pt-table-sync會采用其他校驗和修復算法,但是效率非常低,例如對所有列的group by然后求count(*)(表一定要有主鍵!)。
2.主從數(shù)據(jù)不一致需要通過replace into來修復,該sql語句必須是語句級。pt-table-sync會把它發(fā)起的所有sql語句都設置為statement格式,而不管全局的binlog_format值。這在級聯(lián)A-B-C結構中,也會遇到pt-table-checksum曾經(jīng)遇到的問題,引起行格式的中繼庫的從庫卡庫是必然。不過pt-table-sync默認會無限遞歸的對從庫的binlog格式進行檢查并警告。
3.由于pt-table-sync每次只能修復一個表,所以如果修復的是父表,則可能導致子表數(shù)據(jù)連帶被修復,這可能會修復一個不一致而引入另一個不一致;如果表上有觸發(fā)器,也可能遇到同樣問題。所以在有觸發(fā)器和主外鍵約束的情況下要慎用。pt-table-sync工具同樣也不歡迎主從異構的結構。pt-table-sync工具默認會進行先決條件的檢查。
4.pt-table-sync在修復過程中不能容忍從庫延遲,這正好與pt-table-checksum相反。如果從庫延遲太多,pt-table-sync會長期持有對chunk的for update鎖,然后等待從庫的master_pos_wait執(zhí)行完畢或超時。從庫延遲越大,等待過程就越長,主庫加鎖的時間就越長,對線上影響就越大。因此要嚴格設置max-lag。
5.對從庫數(shù)據(jù)的修復通常是在主庫執(zhí)行sql來同步到從庫。因此,在有多個從庫時,修復某個從庫的數(shù)據(jù)實際會把修復語句同步到所有從庫。數(shù)據(jù)修復的代價取決于從庫與主庫不一致的程度,如果某從庫數(shù)據(jù)與主庫非常不一致,舉例說,這個從庫只有表結構,那么需要把主庫的所有數(shù)據(jù)重新灌一遍,然后通過binlog同步,同時會傳遞到所有從庫。這會給線上帶來很大壓力,甚至拖垮集群。正確的做法是,先用pt-table-checksum校驗一遍,確定不一致的程度:如果不同步的很少,用pt-table-sync直接修復;否則,用備份先替換它,然后用pt-table-sync修復。 說明: 這實際提供了一種對myisam備份的思路:如果僅有一個myisam的主庫,要為其增加從庫,則可以:先mysqldump出表結構到從庫上,然后啟動同步,然后用pt-table-sync來修復數(shù)據(jù)。
1.http://blog.itpub.net/29733787/viewspace-1462550/
show master status ;
show slave status \G;
SET @@SESSION.GTID_NEXT= '5882bfb0-c936-11e4-a843-000c292dc103:15';
2.
pt 如何更好的使用pt工具
1、是的,在凌晨2點開始進行checksum
2、不會,我們嚴格控制了每個chunk的大小,鎖粒度及時間相當短,并且我們也二次開發(fā)了pt-table-checksum,使得風險更可控
故障恢復
mysqldump全備配合binlog做增量備份 通過mysqlbinlog還原數(shù)據(jù)
mysqldump常用
grep -i "change master to" master-data.sql mysql5.5主從能用到
Mysqldump導入數(shù)據(jù)庫很慢的解決辦法
--max_allowed_packet=***** 客戶端/服務器之間通信的緩存區(qū)的最大大小;
--net_buffer_length=**** TCP/IP和套接字通信緩沖區(qū)大小,創(chuàng)建長度達net_buffer_length的行
參照查詢到的目標數(shù)據(jù)參數(shù),導出數(shù)據(jù);
# mysqldump -uroot -p*** 原數(shù)據(jù)庫 -e --max_allowed_packet=4194304 --net_buffer_length=16384 > file.sql
只備份表結構
mysqldump --opt -d 數(shù)據(jù)庫名 -u root -p > xxx.sql
導出數(shù)據(jù)庫為dbname某張表(test)結構及表數(shù)據(jù)(不加-d)
mysqldump -uroot -pdbpasswd dbname test>db.sql;
導出整個數(shù)據(jù)庫結構(不包含數(shù)據(jù))
mysqldump -h localhost -uroot -p123456 -d database > dump.sql
導出單個數(shù)據(jù)表結構(不包含數(shù)據(jù))
mysqldump -h localhost -uroot -p123456 -d database table > dump.sql
mysqldump注意事項
參考 http://huaxin.blog.51cto.com/903026/1846224
mysqldump -uroot -p123456 xxx > /opt/xxx.sql #備份數(shù)據(jù)庫xxx
egrep -v "#|\*|--|^$" /opt/xxx.sql
mysqldump -uroot -p123456 xxx --default-character-set=latin1 > /opt/xxx1.sql
egrep -v "#|\*|--|^$" /opt/xxx1.sql
mysqldump -uroot -p123456 -B xxx --default-character-set=latin1 > /opt/xxx1_B.sql
diff xxx1.sql xxx1_B.sql 對比沒有加 -B選項 和加 -B選項時候的區(qū)別
說明:直觀看 加了 -B 參數(shù)的作用是在導出數(shù)據(jù)庫的時候增加了 創(chuàng)建數(shù)據(jù)庫和連接數(shù)據(jù)庫的命令了,即如下兩條語句
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `xxx` /*!40100 DEFAULT CHARACTER SET latin1 */;
總結:
1、導出數(shù)據(jù)用-B參數(shù)
2、用gzip對備份的數(shù)據(jù)壓縮
mysqldump 的工作原理
利用mysqldump命令備份數(shù)據(jù)的過程,實際上就是把數(shù)據(jù)從mysql庫里面以邏輯的sql語句的形式輸出
cat mysql.sh #備份數(shù)據(jù)庫多個庫的腳本
#!/bin/bash
for dbname in `mysql -uroot -p123456 -e "show databases;"|grep -Evi "database|info|perf"`
do
mysqldump -uroot -p123456 --events -B ${dbname}|gzip > /opt/${dbname}.sql.gz
done
備份單個表
mysqldump -uroot -p123456 martin student > one.sql
備份多個表
mysqldump -uroot -p123456 martin student student1 > two.sql
mysqldump -uroot -p123456 -d martin student1
只備份student1 表的結構 martin代表數(shù)據(jù)庫
mysqldump -uroot -p123456 -A -B --events|gzip > /opt/all.sql.gz -A代表所有數(shù)據(jù)庫
mysqldump -uroot -p123456 -A -B -F --events|gzip > /opt/all.sql.gz -F 會刷新bin-log
mysqldump -uroot -p123456 --master-data=1 --compact martin #--master-data=1 該參數(shù)會找bin-log位置
mysqldump -uroot -p123456 --master-data=2 --compact martin #--master-data=2 該參數(shù)會找bin-log位置,但是語句被注釋,實際并不執(zhí)行
mysqldump的關鍵參數(shù)說明
1、-B 指定多個庫,會增加建庫語句和use語句
2、--compact 去掉注釋,適合調(diào)試輸出 生產(chǎn)環(huán)境不用
3、-A 備份所有庫
4、-F 刷新binlog日志
5、--master-data=1 增加binglog日志文件名及對應的位置點
6、-x 鎖表
7、-l 只讀鎖表
8、-d 只備份表結構
9、-t 只備份數(shù)據(jù)
10、--single-transaction 適合innodb事務數(shù)據(jù)庫備份
--master-data[=#]
If equal to 1, will print it as a CHANGE MASTER command; if equal to 2, that command will
be prefixed with a comment symbol
這個參數(shù)會運行--lock-all-tables,將master的binlog和postion信息寫入SQL文件的頭部,除非結合--single-transaction(但并不是說就完全的不會鎖表了,執(zhí)行的時候也會添加短暫的全局讀鎖)
生產(chǎn)場景myisam備份:
mysqldump -uroot -p123456 -A -B --master-data=1 -x --events|gzip > /opt/all.sql.gz
生產(chǎn)場景innodb備份:
mysqldump -uroot -p123456 -A -B --master-data=1 --events --single-transaction|gzip > /opt/all.sql.gz
system ls /opt
rh xxx1_B.sql xxx1_B.sql.gz xxx1.sql xxx.sql
source /opt/xxx1_B.sql
mysql5.7 mysqldump參數(shù)--all-databases --lock-all-tables --routines --triggers --events --master-data=2 --flush-logs --socket=/opt/3306/mysql.sock --set-gtid-purged=OFF
mysqldump重疊備份帶來的鎖表問題 2013
解決方法:
1.如果你只需要文件備份,不需要經(jīng)常建立從庫,那么可以去掉--master-data。
2.如果你的數(shù)據(jù)量很大 or 備份時的master信息非常需要,那么可以調(diào)整備份周期,避開兩次備份出現(xiàn)重疊的情況
當前題目:mysql常用操作(包括mysqldump,pt-table)
標題URL:http://jinyejixie.com/article36/peodsg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、標簽優(yōu)化、網(wǎng)站內(nèi)鏈、網(wǎng)站制作、電子商務、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)