docker mysqlのインストール、およびプライマリ・スレーブとプライマリ・スタンバイの切り替え


前言
dockerを使うのもしばらく時間がかかりました.ちょうど最近、会社もmysqlの主従と読み書きを分離しています.これまでの愚かな方法は、コードレベルで複数のデータソースを構成し、sqlを実行するときに切り替えることでした.同僚がたまたまmycatと言ってくれました.だからmycatで読み書き分離をするつもりなどを試してみましょう.しかしmycatでは、mysqlデータベースを複数用意することを前提としています.だからdockerで処理するつもりです.そうしないと、mysqlをたくさんローカルにインストールするのも面倒です.
1.ミラーを引き抜く
docker pull mysql:5.7

2.プロファイルの準備
mysql5.7のdockerミラーでMySQL(5.7.19)のデフォルトプロファイルは/etc/mysql/my.cnfファイル.構成をカスタマイズする場合は、/etc/mysql/conf.dディレクトリに作成することをお勧めします.cnfファイル.新しいファイルは任意に名前を付けることができます.接尾辞名がcnfであることを保証すればいいです.新しいファイルの構成項目は/etc/mysql/myを上書きできます.cnfの構成項目.まず/root/mysql/mysqld.cnfはmysqlのプロファイルを作成します.マスターとマスターを切り替えるため、mysqldにあります.cnfファイルでパラメータを変更する必要があります
[client]  
default-character-set=utf8#utf-8  
[mysql]  
default-character-set=utf8#utf-8  
[mysqld]  
collation-server = utf8_unicode_ci#utf-8  
init-connect='SET NAMES utf8'#utf-8  
character-set-server = utf8#utf-8  
server_id = 1#mysql       ,         server_id  
log_bin = log#        ,          。      。         
replicate-do-db=tt#         ,         ,          
replicate-ignore-bb#db=          ,         ,          

3.コンテナの作成
docker run --name mysql -p 3306:3306 -v /root/mysql/1/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123qwe -d mysql:5.7

説明します:-p 3306:3306:コンテナ3306ポートをホストの3306ポート-e MYSQL_にマッピングしますROOT_PASWORD=123 qwe:初期パスワードを123 qwe-v/root/mysql/1/mysqldとする.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf:ホスト内のプロファイルをコンテナにマウントし、コンテナに入ってmysqlに接続し、リモート権限とプライマリコピーのアカウントを設定します.
docker exec -it mysql /bin/bash
mysql -u root -p
grant all privileges on *.* to root@"%" identified by "new password";#     root         :
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY 'slave';#         
flush privileges;#        

これでmysqlはオンになります.これがメインライブラリであることに注意してください.
4.スレーブコンテナの作成
docker run --name mysql-salve -p 3307:3306 -v /root/mysql/1/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123qwe -d mysql:5.7

その後の構成は、第3ステップの構成と同じです.
5.主従を開く
5.1メインライブラリ操作
mysqldump -uroot -p'password'  --master-data=2 --single-transaction -R --triggers -A > /backup/all.sql
show master status;

表示:+——————+————————————+——————————————————————————————————————+|File|Position|Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +————+———-+————–+——————+——————-+ | log.000001 | 154 | | | | +————+———-+————–+——————+——————-+
5.2ライブラリからの操作
stop slave;#    
CHANGE MASTER TO MASTER_HOST='ip  ',master_port=3306,MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='log.000001',MASTER_LOG_POS=154;#                 
start slave;#    
show slave status \G;

そして表示されたデータからSlave_IO_Running: Yes Slave_SQL_Running:Yesは主従が開いたことを示しています.
5.3ライブラリからの読み取り専用操作
show global variables like "%read_only%";#        

+———————–+——-+ | Variable_name | Value | +———————–+——-+ | innodb_read_only | OFF | | read_only | OFF | | super_read_only | OFF | | transaction_read_only | OFF | | tx_read_only|OFF|+————————————+——+主にそのread_only offは読み取り専用をオフにし、onは読み取り専用をオンにして読み取り専用をオンにします.
flush tables with read lock;#    super           
set global read_only=1;#           

読み取り専用をオフにします.
unlock tables;
set global read_only=0;

6.主従切替
6.1ライブラリからメインライブラリへの切り替え
show slave status \G
STOP SLAVE;
RESET MASTER;
RESET SLAVE;
show master status \G

表示:+——————+————————————+——————————————————————————————————————+|File|Position|Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +————+———-+————–+——————+——————-+ | log.000001 | 154 | | | | +————+———-+————–+——————+——————-+
6.2マスターライブラリからスレーブライブラリへの切り替え
show master status \G
STOP SLAVE;
RESET MASTER;
RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='ip  ',master_port=3307,MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='log.000001',MASTER_LOG_POS=154;#              
start slave;
show slave status \G