快速使用docker 搭建 MySQL主從複製與讀寫分離
阿新 • • 發佈:2021-07-05
搭建 MySQL主從複製與讀寫分離 :
在實際環境中 ,如果對資料庫的讀和寫都在同一個資料庫服務中操作 ,無論實在安全性、高可用性,
還是高併發等各個方面都是完全不能滿足實際需求的 ,因此 ,一般來說都只通過主從複製的方式來同
本機已經搭建了一個mysql,不知道如何構建可以參考docker 搭建mysql
1,配置 主MySQL 配置檔案 :
vim /etc/my.cnf #在配置檔案新增 server-id = 1 #修改 log-bin=master-bin #開啟二進位制日誌 log-slave-updates=true #開啟從伺服器同步主伺服器二進位制日誌
2,重啟mysql, 進入資料庫給從伺服器授權 :
[root@localhost /]# docker exec -it mysql bash //進入主mysql容器 root@d89e02feef14:/# mysql -u root -proot mysql> create user `coolr`@`%` identified by "root"; #建立使用者 mysql> grant all on *.* to `coolr`@`%` with grant option; #新增許可權 mysql> FLUSH PRIVILEGES; #重新整理許可權 mysql> show master status; #檢視主伺服器狀態
如圖:說明我們的bin-log 日誌已經開啟了
3,從機搭建 :
[root@localhost mysql]# mkdir mysql-serve1 #建立 從庫對映目錄 [root@localhost mysql]# cd mysql-serve1 [root@localhost mysql-serve1]# cp /etc/my.cnf /docker/mysql/mysql-serve1/ #複製主庫my.cnf配置 [root@localhost mysql-serve1]# vim my.cnf #修改從庫my.cnf配置 [client] port = 3307 //從庫埠 socket = /tmp/mysql.sock [mysqld] secure_file_priv=/var/lib/mysql port = 3307 socket = /tmp/mysql.sock datadir = /usr/local/mysql/data default_storage_engine = InnoDB performance_schema_max_table_instances = 400 table_definition_cache = 400 skip-external-locking key_buffer_size = 32M max_allowed_packet = 100G table_open_cache = 128 sort_buffer_size = 768K net_buffer_length = 4K read_buffer_size = 768K read_rnd_buffer_size = 256K myisam_sort_buffer_size = 8M thread_cache_size = 16 tmp_table_size = 32M default_authentication_plugin = mysql_native_password lower_case_table_names = 1 sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES explicit_defaults_for_timestamp = true max_connections = 500 max_connect_errors = 100 open_files_limit = 65535 log-bin=mysql-bin binlog_format=mixed server-id = 2 # id 主庫不一樣 別一臺從伺服器同樣配置 id 不同即可 binlog_expire_logs_seconds = 600000 slow_query_log=1 slow-query-log-file=/usr/local/mysql/data/mysql-slow.log long_query_time=3 early-plugin-load = "" innodb_data_home_dir = /usr/local/mysql/data innodb_data_file_path = ibdata1:10M:autoextend innodb_log_group_home_dir = /usr/local/mysql/data innodb_buffer_pool_size = 128M innodb_log_file_size = 64M innodb_log_buffer_size = 16M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_max_dirty_pages_pct = 90 innodb_read_io_threads = 1 innodb_write_io_threads = 1 [mysqldump] quick max_allowed_packet = 500M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 32M sort_buffer_size = 768K read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
修改完成之後構建從機的mysql
3,從機搭建 :
[root@localhost mysql-serve1]# docker run -p 3307:3307 -d --name mysql-serve1 -v /docker/mysql/mysql-serve1/my.cnf:/etc/mysql/my.cnf --privileged=true -e MYSQL_ROOT_PASSWORD=root mysql
#構建從庫
[root@localhost mysql-serve1]# docker exec -it mysql-serve1 bash
#進入從庫
root@cacb4a88b156:/# mysql -uroot -proot
mysql> change master to master_host='192.168.74.129',master_user='coolr',master_password='root',master_log_file='mysql-bin.000011',master_log_pos=983460; # 主伺服器地址、授權使用者、二進位制日誌名稱、偏移量 。
mysql> start slave;
# 開啟從伺服器
mysql> show slave status\G;
#檢視從伺服器狀態
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.217.130
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 604
Relay_Log_File: relay-log-bin.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes # 為yes 表示同步中
Slave_SQL_Running: Yes # 為yes 表示同步中
在本地使用Navicat測試mysql:
主庫 建立資料庫:shop
重新整理從庫
資料已同步