Re: データベースの引っ越し・バックアップリストアについて

2014年5月21日 at 13:15

concrete5で実装しているバックアップ&リストアでの対処方法になりますが、

しばらく運用しているサイトのデータベースをバックアップし、リストアする際に、
以下のようなエラーが発生することがあります。

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 でも発生しました。