【MySQL(20)】mysql 8 docker主従構築

4408 ワード

DBAの仕事をしたことがないので、mysql環境全体が本当に難しいことに気づきました...私が使っているmacは、普段は単機でテストして、brewで地元のmysqlを入れて、今度は主従をやりたいと思って、バイナリバッグで特定のカタログの下で構築して、いろいろな穴を発見したいと思っています.の全然つながらない.mysqlの異なるバージョンのコマンドはすべて異なっていて、その上多くの設定は実は比較ピットがあって、例えばいくつかのパラメータは第1位でなければならなくて、指定のプロファイルは--defaults-fileで--default-fileではありませんて、これらのコマンドはあなたは公式サイトを研究しないで、まったく使えませんが、時間もありません.の仕方なく、後でdockerで整えることにしましたが、ここに記録します.
 
参照先:https://segmentfault.com/a/1190000014736624
https://hub.docker.com/_/mysql/
 
1.ラドックミラー
docker pull mysql

次に、2つのプロファイルを作成します.
master:
#       my-master.cnf
[mysqld]
log-bin = mysql-bin
server-id = 1

slave:
#       my-slave.cnf
[mysqld]
##   server_id,     IP,     
server_id=2
##     :              (mysql      )
binlog-ignore-db=mysql  
##          ,  Slave    Slave Master   
log-bin=edu-mysql-slave1-bin  
##    session      ,                  
binlog_cache_size=1M  
##        (mixed,statement,row,     statement)
binlog_format=mixed  
##          /     。    0,       。
expire_logs_days=7  
##                       ,  slave     。
##  :1062          ,1032               
slave_skip_errors=1062  
## relay_log      
relay_log=edu-mysql-relay-bin  
## log_slave_updates  slave               
log_slave_updates=1  
##       (       )
read_only=1 

この中の配置は詳しく研究されていません.copyです.
 
2.mysqlインスタンスの起動
docker run -d -e MYSQL_ROOT_PASSWORD=123123 --name mysql-master -v /Users/miracle/mysql/master:/etc/mysql/conf.d -v /Users/miracle/mysql/master/data:/var/lib/mysql -p 3307:3306 mysql
docker run -d -e MYSQL_ROOT_PASSWORD=123123 --name mysql-slave -v /Users/miracle/mysql/slave:/etc/mysql/conf.d -v /Users/miracle/mysql/slave/data:/var/lib/mysql -p 3308:3306 mysql

ちょっと説明します.
-eパラメータは、dockerコンテナの環境変数を指定します.これはmysqlミラー特有で、mysqlインスタンスのパスワードを設定するために使用されます(これは便利です.再初期化する必要はありません.mysqlを起動します).具体的には、私が前に送った2番目のリンクを見ることができます.
--name、dockerコンテナインスタンス名を指定します.
-v、ここには2つのファイルがマウントされています.1つ目はプロファイルです.これはdocker公式サイトのフォーマットに従う必要があります.私が前に送った2つ目のリンクでも、プロファイルを直接マッピングするのではなく、プロファイルがあるディレクトリをマッピングすることに注意してください.これも穴です.2つ目はdataファイルで、binlogフォーマットの研究に便利です.
-p、それぞれホストの3307と3308ポートで、3306は自分で使います.
 
3.dockerインスタンスのipを調べる
docker inspect --format '{{ .NetworkSettings.IPAddress }}' 7c0ee452c8a9

後のコンテナidは置換する必要があります
master:172.17.0.2
slave:172.17.0.3
 
4.マスターを設定する:
mysql -h127.0.0.1 -P3307 -uroot -p123123

ここは容器ipでつながらないで、原因は考証を待たなければなりません
CREATE USER 'binlog'@'%' IDENTIFIED WITH mysql_native_password BY '123123';
GRANT REPLICATION SLAVE ON *.* to 'binlog'@'%';

binlogという名前のユーザーを作成し、付与権限を付与します.
ここには2つのピットがあります.mysql 8はユーザーを構築するときにWITH構文を使用してパスワードアルゴリズムを指定します.そうしないと、slave接続が間違っています.Authentication plugin'caching_sha2_password' reported error: Authentication requires secure connection.
また権限コマンドを追加し、identified by文を追加してパスワードを指定することはできません.追加するとエラーが発生し、ピットが死んでしまいます.
show master status;

+------------------+----------+--------------+------------------+-------------------+ | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000003 |      156 |              |                  |                   | +------------------+----------+--------------+------------------+-------------------+
これらの情報はslaveがbinlogを消費する際に使用する必要があります.
 
5.slaveの設定:
change master to master_host='172.17.0.2', master_user='binlog', master_password='123123', master_port=3306, master_log_file='mysql-bin.003', master_log_pos=156, master_connect_retry=30;

start slave;

次のコマンドを使用して、ステータスを確認します.
show slave status \G;

mysql> show slave status\G; *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: 172.17.0.2                   Master_User: binlog                   Master_Port: 3306                 Connect_Retry: 30               Master_Log_File: mysql-bin.000003
stateがwaitingなら大丈夫だと思いますが、masterに時計を作ってみてください.
 
やっと成功しました.本当に難しいです.後でbinlogを研究することができます.