MySQL関係の色々
Sientific Linux 6.6にMySQL 5.6をインストールしてみる
MySQLはここからダウンロードする
yumリポジトリがあるけど、パッケージ名が少し異なるので
ここでは、tarをダウンロードしてそこからインストールする
Redhat分のやつで、RPM Bundleとなっているtarを落とす
Downloadボタンを押して次へ進むとOracle Webアカウントでログインしてね♪とでるが
画面下の「No thanks, just start my download.」をクリックすれば
ログインしなくてもダウンロードできる
ポイントは、すでにOSに入っているやつらを削除すること
で、MySQLとMySQL-develパッケージはそのまま削除できる
MySQL-libsが依存関係で削除できないはず
先にMySQL-sharedとMySQL-shared-compatをインストールする
その後、MySQL-libsを削除
そして、残りのMySQL関連パッケージをインストールすればOK
インストール後、rootのパスワードを設定すること
インストール時に/root/.mysql_secretに記載の文字列でパスワードが設定されているので
ログインして設定すること
CentOS5系にMySQL4.1系をインストールするシーンがあった。どうするのかの備忘録。phpMyAdminもインストールする。
CentOS5系のMySQLは5.0系となっている。yumは利用できない。mysql.comから4.1系をダウンロードする。mysql.comには2009/10/14現在4.1.22-0がダウンロード可能となっていた。RHEL4用のRPMを落とす。大丈夫だろう。(汗 ライブラリはShared compatibility librariesを選択しておく。
必要なRPMをダウンロード MySQL-client-standard-4.1.22-0.rhel4.i386.rpm MySQL-devel-standard-4.1.22-0.rhel4.i386.rpm MySQL-server-standard-4.1.22-0.rhel4.i386.rpm MySQL-shared-compat-4.1.22-0.rhel4.i386.rpm
phpMyAdminを動かすにはPHPとPHP-MYSQLが必要となる。CentOS5のPHP-MYSQLはmysqlパッケージを要求するのだが実のところはlibmysqlclient.so.15を要求しているに過ぎない。
# yum install php-mysql ...(snip) --> Processing Dependency: libmysqlclient.so.15(libmysqlclient_15) for package: php-mysql
なので、libmysqlclient.so.15を持ったライブラリを事前にインストールする。MySQL4.1系には存在せず、MySQL5.0系から存在しているのでMySQL5.0系のShared compatibility librariesを用意してインストールする
MySQL-shared-compat-5.0.86-1.rhel5.i386.rpm # rpm --test -ihv MySQL-shared-compat-5.0.86-1.rhel5.i386.rpm # rpm -ihv MySQL-shared-compat-5.0.86-1.rhel5.i386.rpm
実際にRPMファイルの中身を確認すれば早い。
# rpm -qlp MySQL-shared-compat-5.0.86-1.rhel5.i386.rpm /usr/lib/libmysqlclient.so /usr/lib/libmysqlclient.so.10 /usr/lib/libmysqlclient.so.10.0.0 /usr/lib/libmysqlclient.so.12 /usr/lib/libmysqlclient.so.12.0.0 /usr/lib/libmysqlclient.so.14 /usr/lib/libmysqlclient.so.14.0.0 /usr/lib/libmysqlclient.so.15 /usr/lib/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient_r.so /usr/lib/libmysqlclient_r.so.10 /usr/lib/libmysqlclient_r.so.10.0.0 /usr/lib/libmysqlclient_r.so.12 /usr/lib/libmysqlclient_r.so.12.0.0 /usr/lib/libmysqlclient_r.so.14 /usr/lib/libmysqlclient_r.so.14.0.0 /usr/lib/libmysqlclient_r.so.15 /usr/lib/libmysqlclient_r.so.15.0.0 # rpm -qlp MySQL-shared-compat-4.1.22-0.rhel4.i386.rpm /usr/lib/libmysqlclient.so /usr/lib/libmysqlclient.so.10 /usr/lib/libmysqlclient.so.10.0.0 /usr/lib/libmysqlclient.so.12 /usr/lib/libmysqlclient.so.12.0.0 /usr/lib/libmysqlclient.so.14 /usr/lib/libmysqlclient.so.14.0.0 /usr/lib/libmysqlclient_r.so /usr/lib/libmysqlclient_r.so.10 /usr/lib/libmysqlclient_r.so.10.0.0 /usr/lib/libmysqlclient_r.so.12 /usr/lib/libmysqlclient_r.so.12.0.0 /usr/lib/libmysqlclient_r.so.14 /usr/lib/libmysqlclient_r.so.14.0.0
mysql-serverにはperl-DBIが必須
# yum install perl-DBI
晴れて、MySQL4.1系のインストール
# rpm -ihv MySQL-server-standard-4.1.22-0.rhel4.i386.rpm # rpm -ihv MySQL-devel-standard-4.1.22-0.rhel4.i386.rpm # rpm -ihv MySQL-client-standard-4.1.22-0.rhel4.i386.rpm
あとは、phpとphp-mysqlとapacheとphpMyAdminをインストールすればOKかな。
不具合としては
かな。
php-mysqlをRPMではなく、ソースからインストールする方法を探してみた。あった。
php-mysqlでインストールされるiniファイルをバックアップ # cp /etc/php.d/mysql.ini ./ # cp /etc/php.d/mysqli.ini ./ # cp /etc/php.d/pdo_mysql.ini ./ php-mysqlを削除 # rpm -e php-mysql mysqlのライブラリが入っている場合は削除 # rpm -e MySQL-shared-compat-5.0.86-1 mysqlの4.1系ライブラリをインストール # rpm -ihv MySQL-shared-compat-4.1.22-0.rhel4.i386.rpm php 5.1.6のソースディレクトリ内でmysqlに移動 # cd ext/mysql configureファイルを作成 # phpize コンパイル # ./configure --with-mysql=/usr/lib # make インストール # make install Installing shared extensions: /usr/lib/php/modules/ これで、mysql.soがインストールされる バックアップしておいたmysql.iniをコピー # cp mysql.ini /etc/php.d/ apacheの再起動 phpinfoを見てみる!
ここで想定しているのはRPMでインストールしたMySQL
マスタ
server-id = 1 log-bin GRANT REPLICATION SLAVE ON *.* TO 'repl'@'スレーブIP' IDENTIFIED BY '********';
log-binは複数の記述方法がある
log-bin | バイナリログを使用する ファイル名はホスト名-binとなる |
log-bin = [base_name] | バイナリログを使用する。ファイル名は[base_name]-binとなる。ディレクトリはデータディレクトリ |
log-bin = /var/lib/mysql/hogehoge | バイナリログを使用する。ファイル名はhogehoge-binとなる。ディレクトリは/var/lib/mysql/ |
可能な限りbase_nameを指定する
スレーブ
server-id = 2 read-only report-host = [FQDN] relay-log = [base_name] relay-log-index = [base_name] relay-log-info-file = [file_name] master-host = [マスタホスト名 or IP] master-user = [レプリケーション用ユーザ名] master-password = [レプリケーション用ユーザのパスワード] skip-slave-start
read-only | スレーブスレッドかSUPER権限を持つユーザ以外からはアップデートを受け付けない、クライアントからのアップデートを受け付けない! |
report-host | マスターでスレーブホスト表示が可能になる |
relay-log関係 | リレーログのファイル名を指定 |
master-関係 | マスターサーバ情報を指定 |
skip-slave-start | SQL起動時にSLAVEスレッドを自動起動しない |
mysqldump --databases --master-data --opt -u root -p データベース名 > /tmp/データベース名.sql -master-data CHANGE MASTER TO行が挿入される --database CREATE DATABASE行が挿入される
scp ユーザ名@サーバ名:/tmp/データベース名.sql /tmp
mysql -u root -p < /tmp/データベース名.sql
mysql -u root -p mysql> CHANGE MASTER TO MASTER_LOG_FILE='ファイル名', MASTER_LOG_POS=ポジション番号; - 【スレーブ】スレーブスレッドを起動<code bash> mysql> SLAVE START;
mysql> SHOW SLAVE STATUS\G;
SHOW SLAVE STATUS スレーブ上で実行し、スレーブスレッド状態を確認する
\Gを付けておくと読みやすい形式で表示してくれる(大文字である必要あり)
Last_Error | 最後に記録されたエラー情報 |
Seconds_Behind_Master | 最後の更新からの経過秒 |
Slave_IO_State | IO_THREADの状態 |
Slave_IO_Running | IO_THREADの稼動状況、Yesで稼働中 |
Slave_SQL_Runnin | SQL_THREADの稼動状況、Yesで稼動中 |
SHOW PROCESSLIST マスタ/スレーブ上で実行し、プロセス状態が見れる
\Gを付けておくと読みやすい形式で表示してくれる(大文字である必要あり)
【マスタ】 *************************** 18. row *************************** Id: 9899 User: rep Host: ホスト名:41051 db: NULL Command: Binlog Dump Time: 23985 State: Has sent all binlog to slave; waiting for binlog to be updated Info: NULL 【スレーブ】 *************************** 1. row *************************** Id: 2 User: system user Host: db: NULL Command: Connect Time: 63848 State: Waiting for master to send event Info: NULL *************************** 2. row *************************** Id: 3 User: system user Host: db: NULL Command: Connect Time: 0 State: Has read all relay log; waiting for the slave I/O thread to update it Info: NULL
レプリケーション時のログ取り扱いには注意が必要
max-relay-log-size = サイズ | リレーログをローテートするサイズ |
max-binlog-size = サイズ | バイナリログをローテートするサイズ |
mysqladmin flush-logs | 既存バイナリログを閉じて新しく開く |
mysqldump –flush-logs | 既存バイナリログを閉じて新しく開く |
|PURGE MASTER LOGS TO 'mysql-bin.00010'; |mysql-bin.00010までのログを削除 |
PURGE MASTER LOGS BEFORE '2009-02-02 00:00:00'; | 指定時間までのログを削除 |
では安全に削除するためには?
容易にするためには、毎日flush-logsを実行してバイナリログを更新しておくのがよいとされる
# vi ~root/.my.cnf [mysqladmin] password = <password> user= root # chmod 600 ~root/.my.cnf
# logrotate -dv ローテート設定ファイル