天天看點

同一伺服器,MYSQL主從配置。

在一台伺服器上安裝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承載力強