在一台伺服器上安裝2個MYSQL服務,配置MYSQL服務的主從管理。
先安裝主資料庫,然後拷貝主資料庫data檔案夾裡的mysql,performance_schema檔案夾進E:/MySqlData/data1(從資料庫的資料檔案夾)。
(1)修改my.ini檔案(主)。
添加
log-bin=E:/MySqlData/mysql-bin #日志檔案的位置
server-id=1 #ID辨別
binlog-do-db=databaseName #需要同步的資料庫
binlog-ignore-db=mysql #不需要同步的資料庫
binlog-ignore-db=test
expire_logs_days=1 #1天時間自動清理二進制日志
innodb_flush_log_at_trx_commit=1 #每一次事務送出或事務外的指令都需要把日志寫入(flush)硬碟,0的效率最快,2的折中。但是安全性0的最低,詳細看文檔。在高版本SQL中用配置檔案設定無效。隻能用語句SET GLOBAL innodb_flush_log_at_trx_commit=0,檢視用語句SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit%';
sync-binlog=1 #使binlog在每N次binlog寫入後與硬碟 同步
port=3306 #主資料庫的端口
basedir="D:/java/javasoft/MYSQL/" #資料庫安裝路徑
datadir="E:/MySqlData/Data/" #資料庫資料目錄
修改my1.ini檔案(從),此檔案建立一個即可。為從MYSQL服務的配置檔案。
[client]
port=3307
[mysql]
default-character-set=utf8
[mysqld]
server-id=2
#注意:master-xxx參數在MYSQL5.17以上版本就已經失去了作用,使用此處會出錯。而且在從資料庫的master.info權限高于配置檔案,是以在低版本下也是第一次初始化時使用。
#master-host=127.0.0.1 #主機名
#master-user=XXX #主資料庫使用者名(添加資料庫使用者參考下面内容)
#master-password=XXX #主資料庫密碼
#master-port=3306 #端口
#master-connect-retry=60 #自動連接配接延時
#master-log-file='mysql-bin.000001' #讀取的二進制檔案
#master-log-pos=107 #二進制索引位置
replicate-do-db=databaseName #需要備份的資料庫名
replicate-ignore-db=mysql #忽略的資料庫
replicate-wild-ignore-table=databaseName.temp% #告訴從伺服器線程不要複制更新指定表的任何語句,\轉義
replicate-wild-ignore-table=databaseName.t\_temp\_%
replicate-wild-ignore-table=databaseName.tmp\_%
expire_logs_days=1 #二進制日志自動删除的天數
port=3307 #端口和主的不一樣
basedir="D:/java/javasoft/MYSQL/"
datadir="E:/MySqlData/data1/" #資料目錄也不一樣
default-character-set=utf8 #其他配置
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=100
query_cache_size=13M
table_cache=256
tmp_table_size=15M
thread_cache_size=8
因為在高版本的時候使用master-xxx等選項不可用,是以用 change to master 方法執行:
CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_USER='XXX',MASTER_PASSWORD='XXX',MASTER_PORT=3306,MASTER_CONNECT_RETRY=60,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=107
然後執行在slave端執行:start slave 即可。
在master端執行的部分語句:
show master status //可檢視master的二進制檔案和索引位置
reset master //重置master
在slave端執行的部分語句:
show slave status //可檢視slave的連接配接狀态
start slave //啟動slave
reset slave //重置slave
stop slave //停止slave
先停止slave-再重置slave-再啟動slave,可以讓slave同步master的二進制檔案。
更多的主從語句請檢視文檔!
備注:
添加資料庫使用者:(更多權限檢視文檔):
GRANT REPLICATION SLAVE ON *.* TO '使用者名'@'localhost' IDENTIFIED BY '密碼'
添加MYSQL服務進windows服務裡的dos指令語句:
D:\java\javasoft\MYSQL\bin\mysqld --install serverName --defaults-file=d:\java\javasoft\MYSQL\my.ini
删除服務的指令:
sc delete serverName
先啟動主資料庫的服務,再啟動從資料庫的服務,測試即可。
補充:
檢視變量:SHOW VARIABLES LIKE 'sync_binlog'
修改變量:SET GLOBAL sync_binlog=1
資料送出方式:
innodb_flush_log_at_trx_commit=0 更快一點,但安全方面比較差,即使MySQL挂了也可能會丢失事務的資料。而值2隻會在整個作業系統 挂了時才可能丢資料。
innodb_flush_log_at_trx_commit=1 每次自動送出,安全性高,i/o壓力大
innodb_flush_log_at_trx_commit=2(推薦) 每秒自動送出,安全性略有影響,i/o承載強。
日志同步:
Sync-binlog=1 每條自動更新,安全性高,i/o壓力大
Sync-binlog=0 (推薦)根據緩存設定情況自動更新,存在丢失資料和同步延遲風險,i/o承載力強