1. 程式人生 > >win10 使用Docker配置mysql主從複製

win10 使用Docker配置mysql主從複製

開發十年,就只剩下這套架構體系了! >>>   

  1. 拉取映象,我這裡拉取5.6映象
docker pull mysql:5.6.43

     2.找一個目錄編寫主從庫配置檔案,這裡我直接在上部落格找的:

        (1)主庫master.cnf檔案:

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

symbolic-links=0

character-set-server = utf8

#skip-networking

innodb_print_all_deadlocks = 1

max_connections = 2000

max_connect_errors = 6000

open_files_limit = 65535

table_open_cache = 128

max_allowed_packet = 4M

binlog_cache_size = 1M

max_heap_table_size = 8M

tmp_table_size = 16M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

sort_buffer_size = 8M

join_buffer_size = 28M

key_buffer_size = 4M

thread_cache_size = 8

query_cache_type = 1

query_cache_size = 8M

query_cache_limit = 2M

ft_min_word_len = 4

log-bin = mysql-bin

server-id = 1

binlog_format = mixed

performance_schema = 0

explicit_defaults_for_timestamp

#lower_case_table_names = 1

interactive_timeout = 28800

wait_timeout = 28800

# Recommended in standard MySQL setup

sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES

[mysqldump]

quick

max_allowed_packet = 16M

[myisamchk]

key_buffer_size = 8M

sort_buffer_size = 8M

read_buffer = 4M

write_buffer = 4M

    (2)從庫slave.cnf檔案:

[mysqld]

pid-file = /var/run/mysqld/mysqld.pid

socket = /var/run/mysqld/mysqld.sock

datadir = /var/lib/mysql

symbolic-links=0

character-set-server = utf8

#skip-networking

innodb_print_all_deadlocks = 1

max_connections = 2000

max_connect_errors = 6000

open_files_limit = 65535

table_open_cache = 128

max_allowed_packet = 4M

binlog_cache_size = 1M

max_heap_table_size = 8M

tmp_table_size = 16M

read_buffer_size = 2M

read_rnd_buffer_size = 8M

sort_buffer_size = 8M

join_buffer_size = 28M

key_buffer_size = 4M

thread_cache_size = 8

query_cache_type = 1

query_cache_size = 8M

query_cache_limit = 2M

ft_min_word_len = 4

log-bin = mysql-bin

server-id = 2

binlog_format = mixed

performance_schema = 0

explicit_defaults_for_timestamp

#lower_case_table_names = 1

interactive_timeout = 28800

wait_timeout = 28800

# Recommended in standard MySQL setup

sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER,STRICT_TRANS_TABLES

[mysqldump]

quick

max_allowed_packet = 16M

[myisamchk]

key_buffer_size = 8M

sort_buffer_size = 8M

read_buffer = 4M

write_buffer = 4M

     3.啟動兩個mysql 埠號分別為 13306 和 23306,注意 執行一下命令需要進入到有master.cnf 和slave.cnf配置的目錄下,可以自己建立一個目錄。另外執行時系統會提示你是否需要共享檔案給docker,點選共享即可。

docker run -p 13306:3306 --name master -v $PWD/master.cnf:/etc/mysql/conf.d/master.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.43

docker run -p 23306:3306 --name slave -v $PWD/slave.cnf:/etc/mysql/conf.d/slave.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.43

     4.主庫建立一個賬,並進行許可權配置。(為了方便我這裡直接用navicat進行連線配置,當然為了提高逼格,你也可以進入容器進行配置)

 

執行sql:

-- 建立使用者
CREATE user jskj;
GRANT ALL PRIVILEGES ON *.* TO jskj@'%' IDENTIFIED BY '123456'; 
FLUSH PRIVILEGES;

    5.查詢主庫mysql-bin資訊: show master status

    6.從庫配置連線主庫,並開啟從庫同步功能

change master to master_host='宿主機ip', master_user='jskj',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=1689;

    7.測試

    主庫建立jskj資料庫並建立biz_user表同時插入資料。從庫同步成功:

 

8.以上配置已經完成,接下來進行要點說明:

(1)資料庫配置說明:

lower_case_table_names=1 : 開啟時,是忽略表名、列名等資料結構的大小寫
server-id=1 :此mysq伺服器的唯一標識,一般第一臺master配置為1 第二臺mysql伺服器配置為2 第三n臺配置為n ...。
log-bin:開啟二進位制記錄。這是為了主從複製而做的設定。本文使用RBR(Row-Based Replication)模式。
slow_query_log=1:開啟慢查詢日誌。如果某一條SQL執行的時間超過long_query_time設定的秒數,那麼就記錄下來。記錄檔案路徑可以使用show variables;命令,在變數名是slow_query_log_file下查詢到具體的日誌檔案路徑。
long_query_time=1:單位是秒。指如果某一條SQL語句執行時間超過1秒,就記錄下來。必須開啟慢查詢日誌了以後,此變數才能使用。
log_error:開啟錯誤日誌。show variables like 'log_error'; 就可以查詢到日誌檔案的路徑。mysql的docker官方映象如果設定別的取值會導致容器無法正常啟動。

(2)從庫配置說明:

change master to

master_host='ip', //Master 伺服器Ip地址,

master_port=3306,//Master 埠號

master_user='zijixie',//Master 使用者名稱

master_password='123456',//使用者密碼

master_log_file='mysql-bin.000004',//Master伺服器產生的日誌要和Master伺服器所配置的相互對應如下如所示的file對應

master_log_pos=1689; //申明從庫從主庫的日誌檔案中哪個位置開始讀取,一般跟從庫的position對應。