大阪市中央区 システムソフトウェア開発会社

営業時間:平日09:15〜18:15
MENU

mySQLバックアップ・リストア

株式会社クローバーフィールドの経営理念
著者:津路高広
公開日:2023/09/28
最終更新日:2023/09/28
カテゴリー:技術情報
タグ:

津路です。
久しぶりに投稿します。

今回は、mySQLを取り扱うことになり、経験談です。
環境は、Ubutu20.04LTSバージョンに、XAMPPをインストールしてます。
標準では、sudo /opt/lampp/lampp start コマンドで、Apache, mySQLが起動します。

最初に、sudo /opt/lampp/mysql -u rootでログインしちゃって、パスワードを設定するんですね。
ところが、このパスワード、しばらく使わないことになるので、忘れてしまいます。
というのが、まず問題の原因。

そして、mySQLにて、独自データベースを作成して、テーブルを作ったり、レコードを登録したりしているうちに、
mySQLのディレクトリ、/opt/lampp/var/mysqlには、巨大なファイルが出来上がります。

そこで、このibdata1, ib_logfile0/1などのファイルを小さくするにはどうするかと申しますと、一旦全体をバックアップして、
復元するのが、良いそうなんです。
と、それを実行しようとすると、日常は独自データベースとユーザで管理しているため、rootで入ろうとすると、パスワードを忘れてます。
ここで、my.iniの[mysqld]項目に行を追加すればよいのですが、linuxでは、my.cnfです。
my.cnfに、恐ろしい行を追加して、サーバー再起動して、パスワードなしでログインして、パスワード設定して、ログアウトして、追加した行を削除して、再起動しなおす。。。

さて、バックアップするときには、

といったコマンドで、sqlの塊をファイルに保存します。
ここに、独自のデータベース以外の、mySQLのデータベースsqlが、相当数入るのです。
ほとんどは、知らないテーブルだったりします。

次に、mySQLサーバーを停止するため、lamppコマンドでstopをかけます。

停止したら、問題の巨大なファイルを削除してしまいます。
といっても、とりあえずは、どこかに退避するのですが。。
sudo rm ibdata1 ib_logfile0 ib_logfile1

ファイルを削除しましたら、lamppを再起動します。

そして、問題の行動に移ります。

とすると、必ず、データベースファイルの不整合が起こっているため、エラーが起きます。

エラーの中の、???という名のtableファイルが不安定なまま残っているというのが、問題です。
mySQLユーザが管理するディレクトリにあるため、そのままでは削除できません。Access Deniedになります。
ここで、ユーザをmySQLに切り替えればよいのですが、それも不可能となり、困ります。

権限の問題は、一旦、OSサインアウトして、サインインしなおします。
すると、sudoをつけることで、データベースファイルを削除できます。
ところが、上記で述べた通り、多くのテーブルを知らないため、リストアしようとして、そのたび別のテーブルのエラーが発生します。

ということで、全体をバックアップ・リストアする前に、知らないテーブルについては、調べて、知っているテーブルだけを対象にするのが良いでしょう。
ibdata1については、10分の1程度になりました。

    上に戻る