FC2ブログ
MySQL アップデートをしたあとに必ず行うこと
大抵のソフトはバグがあればアップデートがくるよね?
んで、MySQLなんかも定期的に更新があるわけだ。
この更新の際にテーブルの情報や、ストアドなどの基底部分の更新もされる
こともあって、古いバージョンのテーブルと互換性がなくなるんだよね。

だから、更新作業を行ったあとは必ず、古いバージョンのテーブル等を
新バージョンにするためのサポートツールを実行すること!
ソフト名は、

mysql_upgrade

使い方は簡単で、更新を行いたいMySQLに対してこのプログラムを実行するだけ


$ mysql_upgrade -uuser_name -ppassword -hhost_addr -Phost_port

-u ユーザー名
-p パスワード
-h 接続先MySQLIP
-P 接続先MySQLポート

問題がなければ完了。
スポンサーサイト
MySQL レプリケーション
■用語

・マスター
 更新処理を行うDB

・スレーブ
 マスターから更新処理を受け取りそれを復元するDB

・ステートメントベースレプリケーション
 SQLクエリをスレーブに転送してレプリケーションを行う。
 クエリを送信するのでデータのサイズはとても小さい。
 これを推奨するDBエンジンは
 MyISAM

・行ベースレプリケーション
 更新結果の一行をスレーブに転送してレプリケーションを行う。
 非決定性な関数(UUID()とかの実行した際に結果が変わる物)や、
 ステートメントを使う場合にはこちらがいい。
 これを推奨するDBエンジンは
 InnoDB or MySQL Cluster

・ミックスレプリケーション
 上記ふたつをミックスして行う方法。
 これを推奨するDBエンジンは
 InnoDB

・バイナリログ(master)
 データベースを更新したSQLクエリを記録した物

・リレーログ(slave)
 マスターDBから取得した更新クエリを記録した物

・BinLogDumpスレッド(master)
 バイナリログに記録されているクエリをスレーブに送信するスレッド

・IOスレッド(slave)
BinLogDumpから送られてきたクエリをリレーログに記録するスレッド

・SQLスレッド(slave)
 リレーログに記録されたクエリを実行して更新を行うスレッド

■シングルマスタ/マルチスレーブ(マスタ1:スレーブ多数)の手順

1、マスター側の my.cnf(Windows の場合は my.iniかな) を次のように書き換え、再起動する。

 server-id = 11
 ※レプリケーションを構成するDBで一意の値を設定する。
  UUID_SHORT関数を使う場合は、1 ~ 255 の範囲で設定すること

 log-bin = mysql-bin
 ※バイナリログの出力パス(ファイル名だけの場合は、datadirに出力される)。
  記述することでバイナリログが出力されるようになる。
  動作中には mysql-bin.000001 などのファイルが生成される

 set-variable = expire_logs_days = 14
 ※バイナリログの保存期間。スレーブが読み取る前に消えるとあれなので
  環境に合わせて設定すること

 binlog_format = MIXED
 ※レプリケーションの同期方法を設定する
 STATEMENT(1) or ROW(2) or MIXED(0) から選択する

 sync_binlog = 1
 ※バイナリログの同期を行うかの設定
 この設定を1にすることで、トランザクションのコミット時にその更新がバイナリログに保存される。
 毎度、ディスクへのアクセスが発生するので遅くなる。状況により変更させる。
 このパラメータを使用するときは、innodb_support_xa=On にすること


2、マスター側のDB にレプリケーション用のユーザーを作成する

 例 GRANT REPLICATION SLAVE ON *.* TO repl@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'password';

 ※ユーザーの特権には REPLACATION SALVE ON だけでいい。


3、マスターのデータをスレーブにコピー

 ①マスターDBに接続し、下記のコマンドを実行する。繋げっぱなしにすること!
  FLUSH TABLES WITH READ LOCK;

  ※上記コマンドを使ってDBへのアクセスをロックする。

 ②マスターDBのデータフォルダの中身をすべてスレーブのデータフォルダにコピーする
  ※スレーブのフォルダにコピーされたデータに不必要なものがあるので削除する
   *.log *.err *.info *.index マスターのバイナリログ

 ③マスターDBで下記のコマンドを実行し、バイナリログの名称とPositionを保存する
  SHOW MASTER STATUS;

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+------------------+----------+--------------+------------------+
| mysql-bin.001 | 359 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


 ④マスターDBで下記のコマンドを実行しロックを解除する。
  UNLOCK TABLES;


4、スレーブ側の my.cnf を次のように書き換え、再起動する

 server-id = 12 # 必ずレプリーションを構成するDB内で一意であること

 read_only
 ※SUPER特権を持たないユーザーは更新できないようにする

 log-bin = mysql-bin
 set-variable = expire_logs_days = 14
 sync_binlog = 1

 ** ここから下はスレーブがマスターとなって孫スレーブを作る際に必要な項目

 log-slave-updates
 ※このパラメータが入ると、スレーブでもバイナリログを書き込む様になる

5、スレーブのmysql に接続し、スレーブとして動作するように設定

 ①スレーブとして動作するようにマスターの情報を設定する
  change master to
master_host='master_ipaddr',
master_port=master_port_no,
master_user='repl',
master_password='password',
master_log_file='mysql-bin.001', # show master status で表示されたログ名
master_log_pos=100; # show master status で表示されたログのポジション

 ②スレーブとして動作させる
start slave;

 ③スレーブとして動作しているか確認する
  show slave status\G;

# この二つが Yes になっていれば正常動作していることになる
Slave_IO_Running: Yes # IOスレッド
Slave_SQL_Running: Yes # SQLスレッド

■マルチマスタの手順

 注意…同時に二つのDBへの書き込みは危ないので行わないこと!必ず書きこむDBは
 ひとつにし、片方がダウンした場合のみもうひとつのサーバーへ書き込み処理を行う
 ようにすること

 1、2、3の手順は同じです。

4、二つ目のマスターの my.cnf を次のように書き換え、再起動する

 log-bin = mysql-bin
 set-variable = expire_logs_days = 14
 sync_binlog = 1

 ※スレーブと違い、 read_only や log_slave_updates は取り除く

5、両方のマスターでスレーブとしても動作するように設定する

 手順はマスター、スレーブ方法と同じ。
TOP
プロフィール

hssamurai

Author:hssamurai
FC2ブログへようこそ!

最新記事
最新コメント

最新トラックバック

月別アーカイブ
カテゴリ