データベースの引っ越し・バックアップリストアについて
2014年5月21日 at 12:37
データベースの引っ越しやバックアップをリストアするとき「phpMyAdmin」 を使うことが多いと思いますが、運用が長くなるとデータベースの容量も大きくなり、バックアップしたファイルのサイズやSQLの長さによってはインポートエラーになることがあると思います。
みなさん、どのように対処されていますか?
レンタルサーバーや環境によって違うとは思いますが、使いやすいツールや対応方法などあれば情報共有していただけませんでしょうか?
よろしくお願いします。
タグ:
Re: データベースの引っ越し・バックアップリストアについて
2014年5月21日 at 12:54
SQLを分割ってどうなの?と思いましたけど、やはり手っ取り早いのはそれなんですかね・・・
Re: データベースの引っ越し・バックアップリストアについて
2014年5月21日 at 13:15
concrete5で実装しているバックアップ&リストアでの対処方法になりますが、
しばらく運用しているサイトのデータベースをバックアップし、リストアする際に、
以下のようなエラーが発生することがあります。
エラーが発生すると、データベースが完全な状態に復元できていません。
これは、MySQLのバッファー(max_allowed_packet)制限により、共有サーバなどは設定を変えるのは困難です。
concrete5で実装しているバックアップは、MySQLの INSERT 文を長く吐き出しますので、
テキストエディターなどで、適度な長さに区切ってあげると問題なくリストア出来るようになります。
ちなみに僕は、btContentLocal でも発生しました。
しばらく運用しているサイトのデータベースをバックアップし、リストアする際に、
以下のようなエラーが発生することがあります。
Fatal error: Uncaught exception 'ADODB_Exception' with message 'mysql error: [2006: MySQL server has gone away] in EXECUTE("SHOW TABLES") ' in /[フォルダ名]/concrete/libraries/3rdparty/adodb/adodb-exceptions.inc.php:78 Stack trace: #0 /[フォルダ名]/concrete/libraries/3rdparty/adodb/adodb.inc.php(1037): adodb_throw('mysql', 'EXECUTE', 2006, 'MySQL server ha...', 'SHOW TABLES', false, Object(ADODB_mysql)) #1 /[フォルダ名]/concrete/libraries/3rdparty/adodb/adodb.inc.php(1012): ADOConnection->_Execute('SHOW TABLES', false) #2 /[フォルダ名]/concrete/libraries/3rdparty/adodb/adodb.inc.php(2273): ADOConnection->Execute('SHOW TABLES') #3 /[フォルダ名]/concrete/libraries/3rdparty/adodb/drivers/adodb-mysql.inc.php(72): ADOConnection->MetaTables(false, false) #4 /[フォルダ名]/concrete/startup/exceptions.php(7): ADODB_mysql->MetaTables() #5 [internal function]: Concrete5_Exception_Handler(Object(ADODB_Exception)) #6 {main} thrown in /[フォルダ名]/concrete/libraries/3rdparty/adodb/adodb-exceptions.inc.php on line 78
エラーが発生すると、データベースが完全な状態に復元できていません。
これは、MySQLのバッファー(max_allowed_packet)制限により、共有サーバなどは設定を変えるのは困難です。
concrete5で実装しているバックアップは、MySQLの INSERT 文を長く吐き出しますので、
テキストエディターなどで、適度な長さに区切ってあげると問題なくリストア出来るようになります。
INSERT INTO [テーブル名] VALUES(・・・)
,(・・・) ←ここがとても長く吐き出される
,(・・・);
INSERT INTO [テーブル名] VALUES(・・・)
,(・・・); ←適度な行数で区切る
INSERT INTO [テーブル名] VALUES(・・・)
,(・・・); ←適度な行数で区切る
ちなみに僕は、btContentLocal でも発生しました。
Re: データベースの引っ越し・バックアップリストアについて
2014年5月21日 at 14:34
SSHからコマンドでダンプ&リストアするのが確実ではありますが…(^^;
Your post has been saved and will be published after approval by the forum moderator.
Katz Ueno
Re: データベースの引っ越し・バックアップリストアについて
■ concrete5 でできること
・concrete5 の統計をとらないようにして MySQL のサイズを小さくする(MySQLのPageStatistics テーブルを空にする)
・concrete5 の自動実行ジョブ、「古いバージョンを削除」を定期的に実行させて MySQL のサイズを小さくする
concrete5 では、MySQL のデータ量が大きくなる一因として、
PageStatistic テーブルが肥大化しちゃうという問題が有ります。
これは、concrete5 でも、Google Analytics のような機能があり、
訪問者のログをとっているからです。
そのために、管理画面のシステム&設定より、統計という項目があるので、そこの項目のチェックを外してください。また、既にデータが大きくなっている人は phpMyAdmin より、PageStatistics を選択して「空にする (Empty)」を押してください。
また、自動実行ジョブの「古いバージョンを削除」も、MySQLのサイズを小さくするのに、ちょっとだけ有効です。
■ SQL 自体
・ファイルを分割してインポートする(SQL の文法を覚えないと・・・)
■ レンタルサーバー
・MySQL 接続に SSH が使えるレンタルサーバーに引越て SSH から対応
でしょうかね・・・。