チラシの裏

2011 年 1 月 17 日

mysql_secure_installation

カテゴリー: MySQL — root @ 1:09 AM

MySQLをセキュアに運用するための基本として、インストール直後に
mysql_secure_installationを使うと良いかもしれない。
rootのパスワードの設定や余分な設定の削除などをやってくれる。

使い方は簡単。
(続きを読む…)

2011 年 1 月 4 日

CREATE TABLE、INSERT時に他のテーブルのレコードを挿入

カテゴリー: MySQL — root @ 1:12 AM

これは便利。

CREATE TABLE deviceInfo_Tmp ENGINE = MYISAM AS
SELECT * FROM deviceInfo
WHERE width >= 480

INSERT INTO deviceInfo SELECT * FROM deviceInfo_Tmp

2009 年 6 月 26 日

MyISAMのデータがご臨終した?

カテゴリー: Linux, MySQL — root @ 3:36 AM

突然、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できるようになったが、解決方法としては良かったのかな・・・・。

2009 年 1 月 12 日

MySQLのバックアップ&リストア&リカバリ

カテゴリー: Linux, MySQL — root @ 11:11 PM

今日は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