2013/06/25

mysql dump restore 高速化

*DB、テーブルサイズを確認する

*dumpでオプションを付ける
-show variables like '%max_allowed_packet%';
-show variables like '%net_buffer_length%';
-mysqldump --max_allowed_packet=? --net_buffer_length=? --opt --no-autocommit --skip-comments 

MySQL 5.1以降、--optが表すオプションは全てデフォルトで有効化されています。これは、--optがデフォルトで有効なためです。 

--quote-names, -Q
`’文字でデータベース、テーブル、そしてカラム名をクオートします。ANSI_QUOTESSQLモードが有効化されている場合、名前は‘"’キャラクタでクオートされます。

*ダンプしながら圧縮する
-mysqldump database table1 table2 | gzip >...sql.gz
gunzip < outputfile.sql.gz | mysql < mysql options>
As for speeding up gzip, you could try pigz, which uses multiple processors/cores.

*作業ディレクトリをNFSを使わず、ioDriveを使う
-df -h

*リストアの高速化設定
-general_log = 0
-sql_log_bin = 0
-innodb_doublewrite = 0
-autocommit = 0
-unique_checks = 0
-foreign_key_checks = 0

すでにあった。
These aren't really comments even though they look that way. They are conditional-execution tokens.
Take this line:
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */

*テーブルを分けて移行する
-特定なテーブルだけ:mysqldump database table1 table2
-特定なテーブル除外:mysqldump database --ignore-table=database.table1 --ignore-table=database.table2


#!/bin/bash
echo "SET unique_checks=0;
SET foreign_key_checks=0;" > backup.sql
mysqldump -u myuser --password=mypassword mydatabase >> backup.sql
echo "COMMIT;" >> backup.sql

mysqldump --skip-comments commentを出力しない。はやくなる?

mysql --max_allowed_packet=1G
★最大1Gである。
★設定ファイルを修正する必要がない。 




==>★
echo 'SET sql_log_bin=0;' > **.sql"

mysqldump -u ** --password=** --socket=*.sock --max_allowed_packet=1G --net_buffer_length=16384 --no-autocommit ** >> **.sql"

tail -2  ${REMOTE_BACK_UP_DIR}$3.sql
=>ファイルの最後を確認する、dump completed....

★リストアする

設定ファイルでdouble-write=0を設定する
mysql -u **  --password=** --max_allowed_packet=1G  **  < **.sql



★サイズの変化
DB物理ファイルサイズー>DUMPファイル(*.sql) 3.8倍大きくなる
DUMPファイル(*.sql)ー>圧縮してgzファイル(*.sql.gz) 
  gzip -c a.txt > a.gz
  239G->19G 十分の一ぐらいね。。 

総合的に考えると、gzを使う場合、物理ファイルの30%ぐらいになるね。

gunzip -c mydb.sql.gz | mysql -u root -p mydb
gzip -c mydb.sql | ssh mysql_server 'cat > *.sql.gz'