トップ  > サーバ設定:運用  > 各アプリケーションのインストール  > MySQLデータベース自動バックアップ運用(mysqlhotcopy)

MySQLデータベース自動バックアップ運用(mysqlhotcopy)  (最終更新日:2009/12/30)

MySQLの全データベースをサーバ内の別ディレクトリに自動バックアップを実施します。

後述のファイルバックアップと連携もできます。

バックアップ設定

1.バックアップスクリプト作成
[root@sv ~]# vi mysql-backup.sh ← MySQLデータベースバックアップスクリプト作成
ここから----------
#!/bin/bash

PATH=/usr/local/sbin:/usr/bin:/bin

# バックアップ先ディレクトリ
BACKDIR=/backup/mysql

# MySQL_rootパスワード
ROOTPASS=xxxxxxxx

# バックアップ先ディレクトリ再作成
rm  -rf $BACKDIR
mkdir -p $BACKDIR

# データベース名取得
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`

# データベースごとにバックアップ
for dbname in $DBLIST
do
    table_count=`mysql -u root -p$ROOTPASS -B -e "show tables" $dbname|wc -l`
    [ $table_count -ne 0 ] &&
    mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done
----------ここまで

[root@sv ~]# chmod 700 mysql-backup.sh ← rootのみ参照・実行
2.動作確認
[root@sv ~]# ./mysql-backup.sh ← スクリプト実行

Invalid db.table name 'mysql.mysql`.`columns_priv' at /usr/bin/mysqlhotcopy line 855. が表示され異常終了してしまう場合。
[root@sv ~]# vi /usr/bin/mysqlhotcopy ← /usr/bin/mysqlhotcopy編集
    my @dbh_tables = eval { $dbh->tables() };
    map { s/^.*?\.//o } @dbh_tables; ← 追加

[root@sv ~]# ll /backup/mysql/ ← MySQLデータベースバックアップ確認
合計 4
drwxr-x--- 2 mysql mysql 4096 11月  1 15:28 mysql
3.バックアップ定期実行設定
[root@sv ~]# echo "0 5 * * * root /root/mysql-backup.sh" > /etc/cron.d/backup ← バックアップ定期自動実行設定追加
後述のファイルバックアップと連携することを前提にしています。

データベース復元

[root@sv ~]# /bin/cp -Rf /backup/mysql/データベース名/ /var/lib/mysql/ ← バックアップより復元したいデータベースをコピー

[root@sv ~]# chown -R mysql:mysql /var/lib/mysql/データベース名/ ← データベース名の所有者をmysqlに変更

[root@sv ~]# chmod 700 /var/lib/mysql/データベース名/ ← データベース名のデータベースのパーミッションを700に変更

[root@sv ~]# chmod 660 /var/lib/mysql/データベース名/* ← データベース名のデータベース内データのパーミッションを660に変更