成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

mysql常用操作(包括mysqldump,pt-table)

生產(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)

成都網(wǎng)站建設
义马市| 石楼县| 泾源县| 师宗县| 东海县| 淮北市| 武义县| 崇文区| 山西省| 玛沁县| 嘉峪关市| 佛冈县| 措勤县| 上犹县| 蓬莱市| 英超| 河西区| 岚皋县| 个旧市| 齐河县| 历史| 兴国县| 隆林| 奉新县| 昆明市| 怀来县| 鄱阳县| 简阳市| 密云县| 曲沃县| 交口县| 涿鹿县| 棋牌| 黄梅县| 夹江县| 察雅县| 乌什县| 乌鲁木齐县| 汝阳县| 五常市| 保山市|