MySQLの最近のブログ記事

MySQLでバックアップ(mysqldump、バイナリログ)

   ブックマークに追加する
MySQLでバックアップをとる方法をまとめておきます。結構大切ですからね。
今回はオンラインバックアップとロールフォワードリカバリについてです。

私は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

MySQLでスロークエリログを出力する方法

   ブックマークに追加する
WebアプリケーションをつくるときにDBにMySQLを使うことが多いのですが、すぐにできるMySQLのパフォーマンス確認方法です。以下手順で簡単にできます。

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がログに出力されるのでパフォーマンス改善が検討できます。

MySQLでEUCのダンプファイルをWindowsに取り込む

   ブックマークに追加する
Linux環境でダンプしたMySQLのファイルをWindows環境に取り込む方法です。
以下で様々なコマンドとともに解説してありましたが、どうも上手くいかなく試行錯誤しました。
参考サイト: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)
松信 嘉範
翔泳社 (2006/03/17)
売り上げランキング: 5709
おすすめ度の平均: 4.5
5 実践的な良書、作者の今後にも期待
4 システム管理者向け

MySQLでtimestamp型を使うとdefault nullができない?

   ブックマークに追加する
MySQLでtimestamp型を使ってテーブルを作成したのですが、勝手に時間が入力されて困っていました。以下テーブル定義例(ブログテーブルをイメージ)

    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設定したら思ったような動作になりました。これって基本なの?知らなかった。。。

#3 MySQLの設定とRailsとのつなぎこみ

   ブックマークに追加する
今回はMySQLでデータベースとテーブル作成

以下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.

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMySQLカテゴリに属しているものが含まれています。

前のカテゴリはLinuxです。

次のカテゴリはmyTaskです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

あわせて読みたいブログパーツ
フィードメーター - ウェブ-HACKS 「とりあえずやってみよう!」ブログ   
track feed
  • SEO対策 
  • _ 
  • _ 
  •  
  •  

このブログはクリエイティブ・コモンズでライセンスされています。