MySql主從部署的實現(xiàn)步驟
1、操作環(huán)境
硬件環(huán)境:香橙派5 aarch64架構(gòu) 軟件環(huán)境:Ubuntu 22.04.3 LTS 軟件版本:mysql-8.0.42 操作方式:mysql_1,mysql_2容器 主節(jié)點:mysql_1 啟動命令:docker run --name mysql_master \ -p 3308:3306 \ -v /data/Test/mysql_master/data:/var/lib/mysql \ -v /data/Test/mysql_master/conf:/etc/mysql/conf.d \ -v /data/Test/mysql_master/logs:/var/log/mysql \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=test0123 \ -e MYSQL_DATABASE=myappdb \ -e MYSQL_USER=myuser \ -e MYSQL_PASSWORD=test0123 \ --restart=always \ -d mysql:8.0.42 \ --default-authentication-plugin=mysql_native_password \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci 從節(jié)點:mysql_2 啟動命令:docker run --name mysql_slave \ -p 3309:3306 \ -v /data/Test/mysql_slave/data:/var/lib/mysql \ -v /data/Test/mysql_slave/conf:/etc/mysql/conf.d \ -v /data/Test/mysql_slave/logs:/var/log/mysql \ -v /etc/localtime:/etc/localtime:ro \ -e MYSQL_ROOT_PASSWORD=test0123 \ -e MYSQL_DATABASE=myappdb \ -e MYSQL_USER=myuser \ -e MYSQL_PASSWORD=test0123 \ --restart=always \ -d mysql:8.0.42 \ --default-authentication-plugin=mysql_native_password \ --character-set-server=utf8mb4 \ --collation-server=utf8mb4_unicode_ci
2、配置操作
2.1、主節(jié)點配置
(1)、my.cnf配置(容器/etc/mysql/conf.d/my.cnf,宿主機/data/Test/mysql_master/conf/master.cnf)
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] # 設(shè)置時區(qū) default-time_zone = '+8:00' #設(shè)置密碼驗證規(guī)則 authentication_policy=mysql_native_password # 限制導入和導出的數(shù)據(jù)目錄 # 為空,不限制導入到處的數(shù)據(jù)目錄; secure_file_priv= init_connect='SET collation_connection = utf8mb4_general_ci' init_connect='SET NAMES utf8mb4' character-set-server=utf8mb4 collation-server=utf8mb4_general_ci skip-character-set-client-handshake skip-name-resolve # 開啟logbin log_bin=binlog # binlog日志格式 binlog_format=ROW # mysql主從備份serverId server_id=1 #參數(shù)優(yōu)化,避免mysql占用太多內(nèi)存 # 減少緩沖池大小 innodb_buffer_pool_size = 64M # 降低臨時表大小 tmp_table_size = 16M # 設(shè)置最大連接數(shù) max_connections = 10
可選參數(shù)
# 0表示讀寫 (主機),1表示只讀(從機) read-only=0 #設(shè)置日志文件保留的時長,單位是秒 binlog_expire_logs_seconds=6000 #控制單個二進制日志大小。此參數(shù)的最大和默認值是1GB max_binlog_size=20 #設(shè)置不要復制的數(shù)據(jù)庫 binlog-ignore-db=test #設(shè)置需要復制的數(shù)據(jù)庫,不寫參數(shù)則默認全部記錄,可以填寫多個 binlog-do-db=需要復制的主數(shù)據(jù)庫名字 例如: binlog-do-db=dbtest01 binlog-do-db=dbtest02 #設(shè)置binlog格式 binlog_format=STATEMENT
(2)、主節(jié)點數(shù)據(jù)庫創(chuàng)建用戶
#進入容器內(nèi)部 docker exec -it mysql_master /bin/bash #登錄mysql mysql -u root -p #查看數(shù)據(jù)庫 show databases; #切換到mysql庫 use mysql; #創(chuàng)建master用戶 create USER 'master'@'%' IDENTIFIED BY 'root'; grant all on *.* to 'master'@'%'; FLUSH PRIVILEGES;
2.2、從節(jié)點配置
(1)、server.cnf配置(容器/etc/mysql/conf.d/server.cnf,宿主機的/data/Test/mysql_2/conf/server.cnf)
[client] default-character-set=utf8mb4 [mysql] default-character-set=utf8mb4 [mysqld] # 設(shè)置時區(qū) default-time_zone = '+8:00' #設(shè)置密碼驗證規(guī)則 authentication_policy=mysql_native_password # 限制導入和導出的數(shù)據(jù)目錄 # 為空,不限制導入到處的數(shù)據(jù)目錄; secure_file_priv= init_connect='SET collation_connection = utf8mb4_general_ci' init_connect='SET NAMES utf8mb4' character-set-server=utf8mb4 collation-server=utf8mb4_general_ci skip-character-set-client-handshake skip-name-resolve #server_id不要和主庫的server_id相同就行 server_id=2 #一般從數(shù)據(jù)庫作為讀數(shù)據(jù)庫 default-storage-engine=MyISAM
(2)、從節(jié)點數(shù)據(jù)庫創(chuàng)建用戶
#進入容器內(nèi)部 docker exec -it mysql_slave /bin/bash #登錄mysql mysql -u root -p #查看數(shù)據(jù)庫 show databases; #切換到mysql庫 use mysql; #創(chuàng)建slave用戶 create USER 'slave'@'%' IDENTIFIED BY 'root'; grant all on *.* to 'slave'@'%'; FLUSH PRIVILEGES;
2.3、配置數(shù)據(jù)同步
(1)、登錄master節(jié)點數(shù)據(jù)庫
#查看master節(jié)點binlog日志狀態(tài) mysql> show master status; +---------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+-------------------+ | binlog.000003 | 841 | | | | +---------------+----------+--------------+------------------+-------------------+
(1)、登錄slave節(jié)點數(shù)據(jù)庫
#停止slave
stop slave;
#查看master節(jié)點binlog日志狀態(tài),MASTER_LOG_FILE、MASTER_LOG_POS根據(jù)master數(shù)據(jù)庫查詢信息配置
CHANGE MASTER TO MASTER_HOST = '172.17.0.5', #host
MASTER_PORT = 3306,#
MASTER_USER = 'master',#binlog
MASTER_PASSWORD = 'passwd',#binlog
MASTER_LOG_FILE = 'binlog.000003',#binlog1
MASTER_LOG_POS = 841;
#啟動slave
start slave;
#查看slave庫狀態(tài)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for source to send event
Master_Host: 172.17.0.5
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000003
Read_Master_Log_Pos: 841
Relay_Log_File: 4b87ab620b91-relay-bin.000002
Relay_Log_Pos: 323
Relay_Master_Log_File: binlog.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 841
Relay_Log_Space: 540
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 61357c39-2e76-11f0-9f6f-0242ac110005
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set, 1 warning (0.01 sec)
2.4、測試
(1)、master節(jié)點創(chuàng)建測試表及插入數(shù)據(jù)
mysql -u root -h 127.0.0.1 -p -P3308 #登錄master節(jié)點創(chuàng)建簡單數(shù)據(jù)表 CREATE TABLE `test` ( `id` int NOT NULL AUTO_INCREMENT, `Test_str` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; mysql> show tables; +-------------------+ | Tables_in_myappdb | +-------------------+ | test | +-------------------+ 1 row in set (0.00 sec) mysql> select * from test; Empty set (0.00 sec) mysql> INSERT INTO test (Test_str) VALUES( '1'); Query OK, 1 row affected (0.02 sec) mysql> select * from test; +----+----------+ | id | Test_str | +----+----------+ | 1 | 1 | +----+----------+ 1 row in set (0.00 sec)
(2)、slave節(jié)點查看數(shù)據(jù)同步
mysql -u root -h 127.0.0.1 -p -P3309 mysql> use myappdb Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +-------------------+ | Tables_in_myappdb | +-------------------+ | test | +-------------------+ 1 row in set (0.01 sec) mysql> select * from test; +----+----------+ | id | Test_str | +----+----------+ | 1 | 1 | +----+----------+ 1 row in set (0.01 sec)
到此這篇關(guān)于MySql主從部署的實現(xiàn)步驟的文章就介紹到這了,更多相關(guān)MySql主從部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL中的LOCATE和POSITION函數(shù)使用方法
不常用:MySQL中的LOCATE和POSITION函數(shù)2010-02-02

