MySQLの最近のブログ記事
MySQLでバックアップをとる方法をまとめておきます。結構大切ですからね。
今回はオンラインバックアップとロールフォワードリカバリについてです。
私はMySQLのサイトは以下でバックアップととっています。
cronでバックアップをとる時は、以下のようなシェルを作成します。
名前は、mysql-dump-backup.shとかにしています。
ロールフォワードリカバリはバイナリログで行うのですが、とる場合ととらない場合があります。
一応基準としては、自分以外の人にもサービスを提供している場合は念のためとっておきます。
my.cnfに以下を追加するとバイナリログの取得ができます。
log-bin=/var/lib/mysql/log/mysql-host
sync_binlog=1
設定例は以下の通り
以下のページを参考にしました
MySQL バックアップ・リストア手順 ? [WordPress] Tips Community
今回はオンラインバックアップとロールフォワードリカバリについてです。
私はMySQLのサイトは以下でバックアップととっています。
# mysqldump --user=root --password=password --single-transaction --master-data=2
--flush-logs --hex-blob --default-character-set=utf8 database >
/home/user/backup/mysql/mysql-dump.sql
cronでバックアップをとる時は、以下のようなシェルを作成します。
名前は、mysql-dump-backup.shとかにしています。
#!/bin/sh backupdate=`date +%Y%m%d%H%M` mysqldump --user=root --password=password --single-transaction --master-data=2
--flush-logs --hex-blob --default-character-set=utf8 database >
/home/user/backup/mysql/mysql-dump_$backupdate.sql
ロールフォワードリカバリはバイナリログで行うのですが、とる場合ととらない場合があります。
一応基準としては、自分以外の人にもサービスを提供している場合は念のためとっておきます。
my.cnfに以下を追加するとバイナリログの取得ができます。
log-bin=/var/lib/mysql/log/mysql-host
sync_binlog=1
設定例は以下の通り
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-bin=/var/lib/mysql/blog/mysql-host sync_binlog=1
以下のページを参考にしました
MySQL バックアップ・リストア手順 ? [WordPress] Tips Community
WebアプリケーションをつくるときにDBにMySQLを使うことが多いのですが、すぐにできるMySQLのパフォーマンス確認方法です。以下手順で簡単にできます。
1) スロークエリログを設定する
/etc/my.cnfに以下記載を設定する
2) スロークエリログを確認する
これで、3秒以上時間がかかっているSQLや、フルスキャンしているSQLがログに出力されるのでパフォーマンス改善が検討できます。
1) スロークエリログを設定する
/etc/my.cnfに以下記載を設定する
[mysqld] <<<省略>>> log-slow-queries=/var/log/mysql/myslow.log long-query-time=3 log-queries-not-using-indexes
2) スロークエリログを確認する
$ less /var/log/mysql/myslow.log $ mysqldumpslow /var/log/mysql/myslow.log
これで、3秒以上時間がかかっているSQLや、フルスキャンしているSQLがログに出力されるのでパフォーマンス改善が検討できます。
Linux環境でダンプしたMySQLのファイルをWindows環境に取り込む方法です。
以下で様々なコマンドとともに解説してありましたが、どうも上手くいかなく試行錯誤しました。
参考サイト:MySQL|あんちょこ
私の場合以下の方法で正常に表示されました。
1) まずはダンプファイルの文字コードを確認する
エディタで開き文字コードを変換する。日本語文字がどの文字コードで読めるか確認する。
(ちなみ私の場合、EUCでした)
2) ダンプファイルをShift-JISで保存
これもエディタで保存。
※いくつか文字化けしたため、一括置換で変更しました。
3) 次にMySQLの文字コードを確認する
以下コマンドより確認、ujis(EUC)になっていたので、my.iniをデフォルトの設定に戻す。
4) Shift-JISにしたダンプファイルをインポートする
コマンドプロンプトより、ダンプファイルの読み込む
5) SQLを実行し、実行結果をdumpする
一応できたはできたのですが、もっといい方法ありそうですね。特に2)がいけてないです。
きちんと調べずに対応してしまいました。もし対処方法をしっていれば是非教えてください。
ちなみにMySQLのバージョンは、5.0.41です。
私はMySQLは↓こちらで勉強してします。内容はすごく深くはないですが、レプリケーションやチューニング等の幅広く実践的な運用手順が網羅されています。
実践的な良書、作者の今後にも期待
システム管理者向け
以下で様々なコマンドとともに解説してありましたが、どうも上手くいかなく試行錯誤しました。
参考サイト:MySQL|あんちょこ
私の場合以下の方法で正常に表示されました。
1) まずはダンプファイルの文字コードを確認する
エディタで開き文字コードを変換する。日本語文字がどの文字コードで読めるか確認する。
(ちなみ私の場合、EUCでした)
2) ダンプファイルをShift-JISで保存
これもエディタで保存。
※いくつか文字化けしたため、一括置換で変更しました。
3) 次にMySQLの文字コードを確認する
以下コマンドより確認、ujis(EUC)になっていたので、my.iniをデフォルトの設定に戻す。
>mysql -u root -p Enter password: ******** mysql> show variables like 'char%'; | character_set_client | ujis | character_set_connection | ujis | character_set_database | ujis | character_set_filesystem | binary | character_set_results | ujis | character_set_server | ujis | character_set_system | utf8
4) Shift-JISにしたダンプファイルをインポートする
コマンドプロンプトより、ダンプファイルの読み込む
>mysql -u root -p [database_name] < dump.txt Enter password: ********
5) SQLを実行し、実行結果をdumpする
>mysql -u root -p [database_name] > output.txt Enter password: ***** select * from [table_name]; \q
一応できたはできたのですが、もっといい方法ありそうですね。特に2)がいけてないです。
きちんと調べずに対応してしまいました。もし対処方法をしっていれば是非教えてください。
ちなみにMySQLのバージョンは、5.0.41です。
私はMySQLは↓こちらで勉強してします。内容はすごく深くはないですが、レプリケーションやチューニング等の幅広く実践的な運用手順が網羅されています。
現場で使える MySQL (DB Magazine SELECTION)
posted with amazlet on 08.01.09
松信 嘉範
翔泳社 (2006/03/17)
売り上げランキング: 5709
翔泳社 (2006/03/17)
売り上げランキング: 5709
おすすめ度の平均: 

実践的な良書、作者の今後にも期待
システム管理者向け
MySQLでtimestamp型を使ってテーブルを作成したのですが、勝手に時間が入力されて困っていました。以下テーブル定義例(ブログテーブルをイメージ)
plan_atのところですが、ここは公開予定日にしたいな、と考えていました。default nullにして指定したときだけ時間を設定しようとしたのですが、調べてみるとどうやら無理みたい。結局はtimestamp型をdatetime型に変更し、default null設定したら思ったような動作になりました。これって基本なの?知らなかった。。。
create table posts (
id int unsigned auto_increment,
user_id int unsigned not null,
subject varchar(128) not null,
content text,
status enum('close', 'open') default 'close',
created_at timestamp,
updated_at timestamp,
plan_at timestamp,
primary key (id),
index user_id_idx (user_id),
index status_idx (status)
);
plan_atのところですが、ここは公開予定日にしたいな、と考えていました。default nullにして指定したときだけ時間を設定しようとしたのですが、調べてみるとどうやら無理みたい。結局はtimestamp型をdatetime型に変更し、default null設定したら思ったような動作になりました。これって基本なの?知らなかった。。。
今回はMySQLでデータベースとテーブル作成
以下3つのデータベースを作成する
(ただ、_testはどのように使うかよくわからなかったので、_developmentと_productionだけ作りました)
■データベースを作成
■テーブルを作成、カテゴリ(プロジェクト)とタスク
タスクを纏めるカテゴリのようなもの(ここではプロジェクト)テーブルとタスクそのもののテーブルを作成する。
■railsアプリケーションの設定ファイル(DB設定と文字コート)を編集
mytask/config/database.yml を編集
mytask/config/environment.rbに文字コード追加
以下3つのデータベースを作成する
(ただ、_testはどのように使うかよくわからなかったので、_developmentと_productionだけ作りました)
■データベースを作成
- mytask_development
mytask_test- mytask_production
mysql> create database mytask_development;
mysql> create database mytask_production;
mysql> grant all on mytask_development.* to username@localhost identified by 'password';
mysql> grant all on mytask_production.* to username@localhost identified by 'password';
■テーブルを作成、カテゴリ(プロジェクト)とタスク
タスクを纏めるカテゴリのようなもの(ここではプロジェクト)テーブルとタスクそのもののテーブルを作成する。
create table projects (
id int unsigned auto_increment,
name varchar(128) not null,
content varchar(255),
task_count int default 0,
status enum('close','open') default 'close',
created_at timestamp,
updated_at timestamp,
limited_at timestamp,
primary key (id),
index status_idx (status)
);
create table tasks (
id int unsigned auto_increment,
project_id int unsigned not null,
name varchar(128) not null,
content text,
status enum('yet', 'exec', 'finish') default 'yet',
created_at timestamp,
updated_at timestamp,
limited_at timestamp,
primary key (id),
index project_id_idx (project_id),
index status_idx (status)
);
■railsアプリケーションの設定ファイル(DB設定と文字コート)を編集
mytask/config/database.yml を編集
development: adapter: mysql database: mytask_development username: username password: password socket: /var/lib/mysql/mysql.sock encoding: utf8
mytask/config/environment.rbに文字コード追加
#KCODE = 'u' # Be sure to restart your web server when you modify this file.


