Linux運用次元のmysqlデータベース(プライマリ・スレーブ・レプリケーション)
4182 ワード
Linux運用次元のmysqlデータベース(プライマリ・スレーブ・レプリケーション)データベースの導入インストール 実験環境準備:rhel 7 2台.3バージョンの仮想マシンserver 1:ipは172.25.1.1 master server 2:ipは172.25.1.2 slaveとして
mysql圧縮パッケージmysql-5.7.24-1を自分で用意します.el7.x86_64.rpm-bundle.tar
解凍してインストールする
データベースのプライマリ・スレーブ・レプリケーション(ipベース)
サーバ1:マスターとしてプロファイルを作成する
サーバ2:slaveとしてプロファイルを作成する
server 1とserver 2はmysqlを同時にオンにし、安全に初期化します.
サーバ1で:
サーバ2で:
テスト:server 1にライブラリを作成してデータを書き込む
サーバ2側:
データベースのプライマリ・スレーブ・レプリケーション(gtidベース)
同じトランザクションのGTIDはすべてのノードで値が一致しているため、GTIDの具体的な値を知る必要はありません.
従来のレプリケーションでは、障害が発生した場合、プライマリ・セカンダリ・スイッチングが必要になり、binlogとposポイントを見つけ、プライマリ・ノードを新しいプライマリ・ノードに指向する必要があります.相対的に面倒で、エラーも発生しやすいです.MySQL 5.6では、binlogとposポイントを探す必要はありません.メインノードのip、ポート、アカウントのパスワードを知るだけでいいです.コピーは自動的なので、MySQLは内部メカニズムGTIDを通じて自動的に同期を探します.
サーバからプライマリサーバに接続した後、自分が実行したGTID(Executed_Gtid_Set)、取得したGTID(Retrieved_Gtid_Set)をプライマリサーバに送り、プライマリサーバから欠落したGTIDおよび対応するtransactionsを過去に補完すればよい.プライマリ・サーバが停止した場合、同期に最も成功したセカンダリ・サーバを見つけて、直接プライマリ・サーバに昇格すればいいです.もしある1台が最新のサーバーから主に昇格しないことを指定するならば、先にchangeから同期の最も成功したあのサーバーまで、GTIDをすべて補充して、それを主に昇格することができます
設定手順:server 1:プロファイルを作成しmysqldを再起動する
Server 2で:プロファイルを作成しmysqldを再起動する
サーバ2でデータベースにログインする
サーバ1側でデータベースにログインしてデータを書き込む
サーバ2側で表示
mysql圧縮パッケージmysql-5.7.24-1を自分で用意します.el7.x86_64.rpm-bundle.tar
解凍してインストールする
tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
yum install -y mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm
データベースのプライマリ・スレーブ・レプリケーション(ipベース)
サーバ1:マスターとしてプロファイルを作成する
vim /etc/my.cnf
:
server-id=1
log-bin=mysql-bin
サーバ2:slaveとしてプロファイルを作成する
vim /etc/my.cnf
:
server-id=2
server 1とserver 2はmysqlを同時にオンにし、安全に初期化します.
systemctl start mysqld
cat /car/log/mysqld.log | grep password ## mysql
mysql_secure_installation
サーバ1で:
mysql -uroot
show databases;
grant replication slave on *.* to repl@'172.25.11.%' identified by 'Westos+001';
show master status; ##
サーバ2で:
mysql -uroot
show databases;
change master to master_host='172.25.11.1',master_user='repl',master_password='Westos+001',master_log_file='mysql-bin.000002',master_log_pos=690;
start slave;
show slave status\G ##
Slave_IO_Running: Yes
Slave_SQL_Running: Yes ## Yes,
テスト:server 1にライブラリを作成してデータを書き込む
mysql> create database westos; ## server2 westos
mysql> use westos
mysql> create table usertb (
-> username varchar(10) not null,
-> password varchar(15) not null); ##
mysql> desc usertb; ##
mysql> insert into usertb values ('user1','123'); ##
mysql> select * from usertb; ##
サーバ2側:
show databases: ## master
select * from usertb;
データベースのプライマリ・スレーブ・レプリケーション(gtidベース)
同じトランザクションのGTIDはすべてのノードで値が一致しているため、GTIDの具体的な値を知る必要はありません.
従来のレプリケーションでは、障害が発生した場合、プライマリ・セカンダリ・スイッチングが必要になり、binlogとposポイントを見つけ、プライマリ・ノードを新しいプライマリ・ノードに指向する必要があります.相対的に面倒で、エラーも発生しやすいです.MySQL 5.6では、binlogとposポイントを探す必要はありません.メインノードのip、ポート、アカウントのパスワードを知るだけでいいです.コピーは自動的なので、MySQLは内部メカニズムGTIDを通じて自動的に同期を探します.
サーバからプライマリサーバに接続した後、自分が実行したGTID(Executed_Gtid_Set)、取得したGTID(Retrieved_Gtid_Set)をプライマリサーバに送り、プライマリサーバから欠落したGTIDおよび対応するtransactionsを過去に補完すればよい.プライマリ・サーバが停止した場合、同期に最も成功したセカンダリ・サーバを見つけて、直接プライマリ・サーバに昇格すればいいです.もしある1台が最新のサーバーから主に昇格しないことを指定するならば、先にchangeから同期の最も成功したあのサーバーまで、GTIDをすべて補充して、それを主に昇格することができます
設定手順:server 1:プロファイルを作成しmysqldを再起動する
vim /etc/my.cnf
server-id=1
log-bin=mysql-b
gtid_mode=ON
enforce-gtid-consistency=true
systemctl restart mysqld
Server 2で:プロファイルを作成しmysqldを再起動する
cat /var/lib/mysql/relay-log.info
cat auto.cnf ## server1 uuid
vim /etc/my.cnf
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true
systemctl restart mysqld
サーバ2でデータベースにログインする
cat relay-log.info # relay-log
mysql -uroot -pWestos+001
mysql> stop slave; ## ip
mysql> CHANGE MASTER TO ## master
-> MASTER_HOST = '172.25.11.1',
-> MASTER_USER = 'repl',
-> MASTER_PASSWORD = 'Westos+001',
-> MASTER_AUTO_POSITION = 1; ## gtid,
mysql> start slave;
mysql> show slave status\G ## ,
Retrieved_Gtid_Set:
Executed_Gtid_Set:
サーバ1側でデータベースにログインしてデータを書き込む
mysql -uroot -pWestos+001
mysql> use westos;
mysql> insert into usertb values ('user2','123');
mysql> insert into usertb values ('user2','123');
サーバ2側で表示
mysql> show slave status\G
Retrieved_Gtid_Set: f84e8de1-38a2-11e9-b78c-5254009afece:1-2
Executed_Gtid_Set: f84e8de1-38a2-11e9
b78c-5254009afece:1-2 ## , 1
mysql> use mysql # gtid
mysql> select * from gtid_executed;