MySQLをセキュアに運用するための基本として、インストール直後に
mysql_secure_installationを使うと良いかもしれない。
rootのパスワードの設定や余分な設定の削除などをやってくれる。
使い方は簡単。
(続きを読む…)
MySQLをセキュアに運用するための基本として、インストール直後に
mysql_secure_installationを使うと良いかもしれない。
rootのパスワードの設定や余分な設定の削除などをやってくれる。
使い方は簡単。
(続きを読む…)
これは便利。
CREATE TABLE deviceInfo_Tmp ENGINE = MYISAM AS SELECT * FROM deviceInfo WHERE width >= 480 INSERT INTO deviceInfo SELECT * FROM deviceInfo_Tmp
突然、MySQLのテーブルのデータがselectできなくなった(‘A`) 。
もしかして、MyISAMのテーブルがぶっとんだのか?
グーグル先生でmyisamchkというものを発見したので使ってみた。
# myisamchk db/daily_report.MYI
Checking MyISAM file: db/daily_report.MYI
Data records: 69451 Deleted blocks: 0
myisamchk: warning: 2 clients are using or haven’t closed the table properly
- check file-size
- check record delete-chain
- check key delete-chain
- check index reference
- check data record references index: 1
- check record links
MyISAM-table ‘db/daily_report.MYI’ is usable but should be fixed
これは、データは残ってるけど読み出せない状態になっているという
ことなのかな・・・・・
とりあえず、壊れているテーブルをダンプしてリストアしたら
selectできるようになったが、解決方法としては良かったのかな・・・・。
今日はMySQLのバックアップ&リストア&リカバリのお勉強をしたので
メモ。
テスト環境:
Redhat系Linux/MySQL : 5.0.27-0vl6。
シチュエーション:
ある日、突然データベースがぶっとんでしまった(’A`)、ので、
数日前に取っておいた全体バックアップとリアルタイムで更新される
バイナリログを使用してデータベースを復旧させる。
●まず、定期的にデータベースの全体バックアップ(権限テーブル含む。
# mysqldump --user=root --password=rootpass --socket=/var/lib/mysql/mysql.sock
--single-transaction --master-data=2 --flush-logs --hex-blob
--default-character-set=binary --add-drop-table --all-databases > mysql-all.dump
(InnoDB以外のテーブルが含まれている場合は、共有ロックをかけるために
--single-transactionをはずしましょう。
(--flush-logsでバックアップと同時にbin-logもスイッチされる。
(/var/lib/mysqlにmysql-bin.000009が生成された
データベースが飛んだ・・・・・(’A`)
●Webアプリがデータベースを更新しないようにapacheをストップ
# service apache2 stop
●MySQLをストップ
# service mysql stop
●リストア、リカバリ時にバイナリログを生成しないように
my.cnfのlog-bin=mysql-binをコメントアウト
#log-bin=mysql-bin
●リモートから接続できなくするため--skip-networkingオプションでmysql起動
# /usr/bin/mysqld_safe --defaults-file=/etc/my.cnf --skip-networking --skip-grant-tables &
[1] 28450
# Starting mysqld-max daemon with databases from /var/lib/mysql
●全体バックアップからリストア
# mysql --user=root --socket=/var/lib/mysql/mysql.sock
--default-character-set=binary < mysql-all.dump
●バイナリログでリカバリ
(全体バックアップ時に新たに生成されたmysql-bin.000009~を使う。
# mysqlbinlog --disable-log-bin /var/lib/mysql/mysql-bin.000009 > recover.sql
# mysql --user=root --password=rootpass --socket=/var/lib/mysql/mysql.sock
--default-character-set=binary < recover.sql
●my.cnfのlog-bin=mysql-binを有効にする
log-bin=mysql-bin
●MySQL再起動
# service mysql stop
# service mysql start
これでOK^^
かな?
Powered by WordPress