MYSQL HA配置マニュアル
12268 ワード
1 MySQLプライマリ・ライト・レプリケーションの有効化
1.1システムのデフォルトのデータベースmariadbをアンインストールする
インストールmysqlインストールパッケージの互換性に問題が発生しました.まず、システムに付属するmariadbをアンインストールします.
1.2旧版インストールパッケージのアンインストール
MySQLおよび関連RPMパッケージを確認し、インストールするかどうか、インストールがある場合は削除(rpm–e名)
rpm -qa | grep -i mysql yum -y remove MySQL-*
1.3 MySQLのインストール
1.3.1インストールMySQLを解凍する
tar xvf MySQL-5.5.52-1.el7.x86_64.rpm-bundl.tar
MySQL-client-5.5.52-1をインストールします.el7.x86_64.rpm,MySQL-server-5.5.52-1.el7.x86_64.rpm,MySQL-devel-5.5.52-1.el7.x86_64.rpmでOK
1.3.2プロファイルの場所の変更
cp/usr/share/mysql/my-default.cnf/etc/my.cnf
1.3.3 MySQLの初期化とパスワードの設定
データベースを初期化しmysql/usr/bin/mysql_を起動install_db service mysql start
rootアカウントの初期パスワードcat/root/.mysql_secret The random password set for the root user at Wed Dec 11 23:32:50 2013 (local time): qKTaFZnl
rootパスワードを111111に変更
ログインmysql-uroot-p 11111の検証
1.3.4 MySQL JDBCドライバのインストール
yum -y install mysql-connector-java
1.3.5リモートログインの許可
1.3.6起動の設定
chkconfig mysql on chkconfig --list | grep mysql
1.3.7 MySQLのデフォルトのインストール場所
/var/lib/mysql/#データベースディレクトリ/usr/share/mysql#プロファイルディレクトリ/usr/bin#関連コマンドディレクトリ/etc/init.d/mysql#起動スクリプト
1.3.8文字セットとデータストレージパスの変更
初期文字セットの表示
構成/etc/my.cnfファイル、データ格納経路、mysqlを変更する.sockパスおよびデフォルト符号化utf-8.
再起動して有効にする
service mysql restart
1.3.9異常処理
質問1:
sqlタイムズの次のエラーが実行されたのは、データベースをアップグレードしたためで、アップグレードが完了した後mysql_を使用していないためです.upgradeのデータ構造のアップグレードによるものです.
ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50544, now running 50637. Please use mysql_upgrade to fix this error.
mysql_の使用upgradeコマンド
root@localhost ~]# mysql_upgrade -u root -p 111111
1.4 MySQLマスター同期の構成
マスター同期は2台のマシンが互いにメインの関係であり,いずれのマシンにも書き込みが同期する.
1.4.1同期アカウントの作成
同期アカウントを2台のマシンにそれぞれ設定
master 1マシン:
mysql> grant all privileges on . to 'repl'@'%' identified by '123456'; mysql> flush privileges;
master 2マシン:mysql>grant all privileges on.to 'repl'@'%' identified by '123456'; mysql> flush privileges;
1.4.2データベース・パラメータの構成
master 1マシン:
1、閉じる
service mysql stop
2、プロファイルの変更/etc/my.cnf
ここで、赤は新規内容:l Log-bin:バイナリログファイルl Server-idの起動:ネイティブデータベースID(および)l Binlog_format:3つのレプリケーション方法があります:ROWSTATEMENTMIXED、デフォルトはSTATEMENT l report-host、report-user、report-password、report-portはmasterレプリケーションのホスト名、ユーザー、パスワード、ポート番号です.
3、mysqlを起動する
service mysql start
Master 2マシン:
1、閉じる
service mysql stop
2、プロファイルの変更/etc/my.cnf ```shell [mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
relay_log=mysql-relay-bin
binlog_format=ROW
report-host = master2
report-user = repl
report-password = 123456
report-port = 3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid``shell 3、mysqlを起動する
service mysql start
1.4.3データベースのバックアップ
同期に失敗したときにデータが失われないように、同期が必要な2つのデータベースデータをバックアップします.バックアップmysql
mysqldump --all-databases -uroot -p > mysql.sql
1.4.4マスター2同期マスター1の設定
master 1マシン:
master 2マシン:
マスター2同期マスター1データの設定
master_hostはmaster 1のIP master_を表しますuserは、メインライブラリmaster 1で同期が許可されているユーザーmaser_を表します.passwordは同期ユーザのパスワードmaster_を表しますlog_fileは、どのbinlogファイルからmaster_の同期を開始するかを示します.log_posは、binlogファイルのposノードの位置から同期を開始することを示す
同期が主にSlaveを表示しているかどうかを確認します.IO_RunningとSlave_SQL_Runningオプション.正常に同期している場合、この2つの選択は同時にYESである必要があります.
Slave_IO_RunningはNOであり,スレーブライブラリとマスターライブラリのネットワークが通じない可能性があることを示している.Slave_SQL_RunningはNOであり,スレーブライブラリとマスターライブラリのデータが一致しない可能性が高いことを示している.
Slave_IO_Running:Connecting、同期したユーザーパスワードが間違っている可能性があります.
同じように逆に同じ操作をする
1.4.5マスター1同期マスター2の設定
master 2マシン:
master 1マシン:
これを介して、マスターは同期して完成して、簡単にテストすることができて、それぞれ2つの機械の上でデータを書いて別の機械の上で同期することができるかどうかを見ます
PS:Slave_を間違えた場合IO_Running:NOは同期したアカウントが正常に作成されているかどうかを確認できます!
1.5 keepalivedをインストールし、監視を設定する
keepalivedは2台のMySQLサーバにインストールされています
まずkeepalivedをインストールする過程は説明しないで正常に解凍してインストールすればいいです
インストール後vim/etc/keepalived/keepalivedを構成する.confの内容は以下の通りです
10.1.1.20のプロファイル
10.1.1.21のプロファイル
mysqlサービスが停止しているかどうかを監視するスクリプトを作成し、上のプロファイルの場所に従ってスクリプトを作成します.
vim/tmp/nimei.sh
スクリプトは簡単です.keepalivedがmysqlサービスが停止したことを検出した後、このスクリプトをトリガーし、keepalivedプロセスを殺し、別のマシンに引き継がせることを目的としています.
修正後keeplivedサービスを開始
このクラスタ全体の構築が完了しました
1.6テスト
機械を探して仮想ipでmysqlを接続します
このように成功してつながって、それからあなたは任意にある機械を閉じることができて、あるいはある機械のmysqlサービス、まだつながっているかどうかを見てみましょう!!
1.1システムのデフォルトのデータベースmariadbをアンインストールする
インストールmysqlインストールパッケージの互換性に問題が発生しました.まず、システムに付属するmariadbをアンインストールします.
mariadb
rpm -qa|grep mariadb
mariadb
rpm -e --nodeps mariadb-libs-5.5.33a-3.el7.x86_64
rpm -e --nodeps mariadb-server-5.5.44-2.el7.x86_64
rpm -e mariadb-devel --nodeps
rpm -e mariadb --nodeps
rpm -qa|grep mariadb
1.2旧版インストールパッケージのアンインストール
MySQLおよび関連RPMパッケージを確認し、インストールするかどうか、インストールがある場合は削除(rpm–e名)
rpm -qa | grep -i mysql yum -y remove MySQL-*
1.3 MySQLのインストール
1.3.1インストールMySQLを解凍する
tar xvf MySQL-5.5.52-1.el7.x86_64.rpm-bundl.tar
MySQL-client-5.5.52-1.el7.x86_64.rpm
MySQL-devel-5.5.52-1.el7.x86_64.rpm
MySQL-embedded-5.5.52-1.el7.x86_64.rpm
MySQL-server-5.5.52-1.el7.x86_64.rpm
MySQL-shared-5.5.52-1.el7.x86_64.rpm
MySQL-shared-compat-5.5.52-1.el7.x86_64.rpm
MySQL-test-5.5.52-1.el7.x86_64.rpm
MySQL-client-5.5.52-1をインストールします.el7.x86_64.rpm,MySQL-server-5.5.52-1.el7.x86_64.rpm,MySQL-devel-5.5.52-1.el7.x86_64.rpmでOK
rpm -ivh MySQL-server-5.5.52-1.el7.x86_64.rpm
rpm -ivh MySQL-client-5.5.52-1.el7.x86_64.rpm
rpm -ivh MySQL-devel-5.5.52-1.el7.x86_64.rpm
1.3.2プロファイルの場所の変更
cp/usr/share/mysql/my-default.cnf/etc/my.cnf
1.3.3 MySQLの初期化とパスワードの設定
データベースを初期化しmysql/usr/bin/mysql_を起動install_db service mysql start
rootアカウントの初期パスワードcat/root/.mysql_secret The random password set for the root user at Wed Dec 11 23:32:50 2013 (local time): qKTaFZnl
rootパスワードを111111に変更
mysql -uroot –pqKTaFZnl
mysql> SET PASSWORD = PASSWORD('111111');
mysql> exit
mysql> use mysql;
mysql> update user set password=password("111111") where user='root';
mysql> flush privileges;
mysql> exit;
ログインmysql-uroot-p 11111の検証
1.3.4 MySQL JDBCドライバのインストール
yum -y install mysql-connector-java
1.3.5リモートログインの許可
mysql> use mysql;
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *FD571203974BA9AFE270FE62151AE967ECA5E0AA |
| node1a146 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
| 127.0.0.1 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
| ::1 | root | *F99E6AEA8DF26B30DA7A57F92F3FABC0E4949F12 |
+-----------+------+-------------------------------------------+
mysql> update user set password=password('111111') where user='root';
mysql> update user set host='%' where user='root' and host='localhost';
mysql> flush privileges;
mysql> exit
1.3.6起動の設定
chkconfig mysql on chkconfig --list | grep mysql
1.3.7 MySQLのデフォルトのインストール場所
/var/lib/mysql/#データベースディレクトリ/usr/share/mysql#プロファイルディレクトリ/usr/bin#関連コマンドディレクトリ/etc/init.d/mysql#起動スクリプト
1.3.8文字セットとデータストレージパスの変更
初期文字セットの表示
mysql> show variables like '%collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
構成/etc/my.cnfファイル、データ格納経路、mysqlを変更する.sockパスおよびデフォルト符号化utf-8.
[client]
password = 111111
port = 3306
default-character-set=utf8
[mysqld]
port = 3306
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
( linux mysql : , ; 0: ,1: )
lower_case_table_names=1
( , 151,MySQL 16384; )
max_connections=1000
[mysql]
default-character-set = utf8
再起動して有効にする
service mysql restart
1.3.9異常処理
質問1:
sqlタイムズの次のエラーが実行されたのは、データベースをアップグレードしたためで、アップグレードが完了した後mysql_を使用していないためです.upgradeのデータ構造のアップグレードによるものです.
ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 42. Created with MySQL 50544, now running 50637. Please use mysql_upgrade to fix this error.
mysql_の使用upgradeコマンド
root@localhost ~]# mysql_upgrade -u root -p 111111
1.4 MySQLマスター同期の構成
マスター同期は2台のマシンが互いにメインの関係であり,いずれのマシンにも書き込みが同期する.
1.4.1同期アカウントの作成
同期アカウントを2台のマシンにそれぞれ設定
master 1マシン:
mysql> grant all privileges on . to 'repl'@'%' identified by '123456'; mysql> flush privileges;
master 2マシン:mysql>grant all privileges on.to 'repl'@'%' identified by '123456'; mysql> flush privileges;
1.4.2データベース・パラメータの構成
master 1マシン:
1、閉じる
service mysql stop
2、プロファイルの変更/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
relay_log=mysql-relay-bin
binlog_format=ROW
report-host = master2
report-user = repl
report-password = 123456
report-port = 3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
ここで、赤は新規内容:l Log-bin:バイナリログファイルl Server-idの起動:ネイティブデータベースID(および)l Binlog_format:3つのレプリケーション方法があります:ROWSTATEMENTMIXED、デフォルトはSTATEMENT l report-host、report-user、report-password、report-portはmasterレプリケーションのホスト名、ユーザー、パスワード、ポート番号です.
3、mysqlを起動する
service mysql start
Master 2マシン:
1、閉じる
service mysql stop
2、プロファイルの変更/etc/my.cnf ```shell [mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=1
log-bin=mysql-bin
relay_log=mysql-relay-bin
binlog_format=ROW
report-host = master2
report-user = repl
report-password = 123456
report-port = 3306
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid``shell 3、mysqlを起動する
service mysql start
1.4.3データベースのバックアップ
同期に失敗したときにデータが失われないように、同期が必要な2つのデータベースデータをバックアップします.バックアップmysql
mysqldump --all-databases -uroot -p > mysql.sql
1.4.4マスター2同期マスター1の設定
master 1マシン:
mysql> flush tables with read lock;
mysql> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000003 | 365 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.03 sec)
mysql> unlock tables;
master 2マシン:
マスター2同期マスター1データの設定
mysql> change master to master_host='master1IP', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000003',master_log_pos=365;
mysql> start slave;
, yes
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
master_hostはmaster 1のIP master_を表しますuserは、メインライブラリmaster 1で同期が許可されているユーザーmaser_を表します.passwordは同期ユーザのパスワードmaster_を表しますlog_fileは、どのbinlogファイルからmaster_の同期を開始するかを示します.log_posは、binlogファイルのposノードの位置から同期を開始することを示す
同期が主にSlaveを表示しているかどうかを確認します.IO_RunningとSlave_SQL_Runningオプション.正常に同期している場合、この2つの選択は同時にYESである必要があります.
Slave_IO_RunningはNOであり,スレーブライブラリとマスターライブラリのネットワークが通じない可能性があることを示している.Slave_SQL_RunningはNOであり,スレーブライブラリとマスターライブラリのデータが一致しない可能性が高いことを示している.
Slave_IO_Running:Connecting、同期したユーザーパスワードが間違っている可能性があります.
同じように逆に同じ操作をする
1.4.5マスター1同期マスター2の設定
master 2マシン:
mysql> flush tables with read lock;
mysql> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000004 | 207 | | |
+---------------+----------+--------------+------------------+
1 row in set (0.03 sec)
mysql> unlock tables;
master 1マシン:
mysql> change master tomaster_host='10.1.1.21', master_port=3306, master_user='repl',master_password='123456', master_log_file='binlog.000004',master_log_pos=207;
mysql> start slave;
mysql> show slave status \G
, yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
これを介して、マスターは同期して完成して、簡単にテストすることができて、それぞれ2つの機械の上でデータを書いて別の機械の上で同期することができるかどうかを見ます
PS:Slave_を間違えた場合IO_Running:NOは同期したアカウントが正常に作成されているかどうかを確認できます!
1.5 keepalivedをインストールし、監視を設定する
keepalivedは2台のMySQLサーバにインストールされています
まずkeepalivedをインストールする過程は説明しないで正常に解凍してインストールすればいいです
インストール後vim/etc/keepalived/keepalivedを構成する.confの内容は以下の通りです
10.1.1.20のプロファイル
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state backup # BACKUP
interface eth0
virtual_router_id 51
priority 100 # , 90
advert_int 1
nopreempt # , ,
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.25
}
}
virtual_server 10.1.1.25 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50 #
protocol TCP
real_server 10.1.1.20 3306 {
weight 3
notify_down /tmp/nimei.sh # mysql ( )
TCP_CHECK {
connect_timeout 10 #
nb_get_retry 3 #
delay_before_retry 3 #
connect_port 3306 #
}
}
}
10.1.1.21のプロファイル
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
[email protected]
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state backup
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.1.25
}
}
virtual_server 10.1.1.25 3306 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 10.1.1.21 3306 {
weight 3
notify_down /tmp/nimei.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
mysqlサービスが停止しているかどうかを監視するスクリプトを作成し、上のプロファイルの場所に従ってスクリプトを作成します.
vim/tmp/nimei.sh
#!/bin/sh
pkill keepalived
スクリプトは簡単です.keepalivedがmysqlサービスが停止したことを検出した後、このスクリプトをトリガーし、keepalivedプロセスを殺し、別のマシンに引き継がせることを目的としています.
修正後keeplivedサービスを開始
このクラスタ全体の構築が完了しました
1.6テスト
機械を探して仮想ipでmysqlを接続します
[root@localhost html]# mysql -uab -h 10.1.1.25 -p123
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 736
Server version: 5.1.66-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
このように成功してつながって、それからあなたは任意にある機械を閉じることができて、あるいはある機械のmysqlサービス、まだつながっているかどうかを見てみましょう!!