文章目錄
本文在Windows下安裝了兩個MySQL.5.6,並進行主從同步配置,最後採用mycat中間件進行讀寫分離和測試。
安裝兩個mysql數據庫
如果本機上之前沒有安裝過MySQL,那麼首先按照正常方法安裝第一個MySQL即可,安裝成功後接下來安裝第二個MySQL,此時需注意:
1、先刪掉安裝之前的mysql配置的環境變量
2、關掉之前的mysql服務
3、添加配置文件
4、從cmd命令行進入當前mysql的安裝目錄的文件夾下,輸入命令
mysqld install mysql2 --default-file="C:\mysql-5.7.22-winx64\my.ini"
default-file後是配置文件的路徑。mysql2是給我們給MySQL服務起的名字,打開服務可以看到:
5、通過“win+r”輸入regedit打開註冊表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql2,修改ImagePath參數,更正mysql2服務相關路徑。
改正後格式如下:
6、啓動數據庫
C:\mysql-5.7.22-winx64\bin>net start mysql2
mysql2 服務正在啓動 .
mysql2 服務已經啓動成功。
mysql2服務啓動後,去data/xxx.err文件中找到臨時密碼,進行登錄
之後再修改密碼
set password for root@localhost=password('001nX123456');
用新密碼登錄。
配置master數據庫
1、my.ini配置文件如下:
[client]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[mysqld]
# 設置3306端口
port = 3307
# 設置mysql的安裝目錄
basedir=D:\\idea\\mysql-5.6.45-winx64
# 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯
datadir=D:\\idea\\mysql-5.6.45-winx64\\data
#secure file priv
# 允許最大連接數
max_connections=20
# 服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
## 設置server_id,一般設置爲IP
server_id=1
## 複製過濾:需要備份的數據庫,輸出binlog
binlog-do-db=mydb
binlog-do-db=db1
binlog-do-db=db2
binlog-do-db=db3
## 複製過濾:不需要備份的數據庫,不輸出(mysql庫一般不同步)
binlog-ignore-db=mysql
## 開啓二進制日誌功能,可以隨便取,最好有含義
log-bin=edu-mysql-bin
## 爲每個session 分配的內存,在事務過程中用來存儲二進制日誌的緩存
binlog_cache_size=1M
## 主從複製的格式(mixed,statement,row,默認格式是statement)
binlog_format=mixed
## 二進制日誌自動刪除/過期的天數。默認值爲0,表示不自動刪除。
expire_logs_days=7
## 跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷。
## 如:1062錯誤是指一些主鍵重複,1032錯誤是因爲主從數據庫數據不一致
#slave_skip_errors=1062
## 如果需要同步函數或者存儲過程
#log_bin_trust_function_creators=true
2、重啓mysql服務
3、cmd進入mysql安裝目錄的bin文件下,
輸入命令:mysql -uroot -P3307 -p
進入數據庫
4、grant replication slave, replication client on . to ‘slaver’@localhost identified by ‘123456’;
給主庫添加一個用戶,包含他的ip地址和密碼,並賦予它複製的權限;
5、flush privileges;
刷新權限;
6、select user,host from mysql.user;
7、show master status;
查看master當前binlog的狀態:
這兩個值需記下,在後面從庫配置slave中使用。
配置slave數據庫
一、配置文件,注意端口號需與master的不同
[client]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[mysqld]
# 設置3306端口
port = 3310
# 設置mysql的安裝目錄
basedir=D:\\idea\\mysql-5.6.45-slaver
# 設置 mysql數據庫的數據的存放目錄,MySQL 8+ 不需要以下配置,系統自己生成即可,否則有可能報錯
datadir=D:\\idea\\mysql-5.6.45-slaver\\data
#secure file priv
# 允許最大連接數
max_connections=20
# 服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
# 創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
## 設置server_id,一般設置爲IP
server_id=2
## 複製過濾:需要備份的數據庫,輸出binlog
binlog-do-db=mydb
binlog-do-db=db1
binlog-do-db=db2
binlog-do-db=db3
## 複製過濾:不需要備份的數據庫,不輸出(mysql庫一般不同步)
binlog-ignore-db=mysql
## 開啓二進制日誌功能,可以隨便取,最好有含義
log-bin=edu-mysql-bin
## 爲每個session 分配的內存,在事務過程中用來存儲二進制日誌的緩存
binlog_cache_size=1M
## 主從複製的格式(mixed,statement,row,默認格式是statement)
binlog_format=mixed
## 二進制日誌自動刪除/過期的天數。默認值爲0,表示不自動刪除。
expire_logs_days=7
## 跳過主從複製中遇到的所有錯誤或指定類型的錯誤,避免slave端複製中斷。
## 如:1062錯誤是指一些主鍵重複,1032錯誤是因爲主從數據庫數據不一致
#slave_skip_errors=1062
## 如果需要同步函數或者存儲過程
#log_bin_trust_function_creators=true
2、重啓mysql服務
3、cmd進入mysql安裝目錄的bin文件下,
輸入命令:mysql -uroot -P3310 -p
進入數據庫
4、
輸入
change master to master_host=‘127.0.0.1’,master_user=‘slave-win’,master_password=‘123456’, master_log_file= ‘edu-mysql-bin.000005’,master_log_pos=427,master_port=3307;
其中包含了主庫的ip地址、端口號,之前在主庫上設置的可訪問的用戶名和密碼,以及master狀態的信息master_log_file和master_log_pos。
如果出現
原因是從庫用來連接主庫的用戶權限或者密碼不對。
5、輸入:
stop slave;
start slave;
6、show slave status;
看到兩個yes即主從配置成功。
使用mycat進行讀寫分離
1、配置文件schema需添加讀寫分離的相關配置
<table name="employee" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3307" user="root"
password="root">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="localhost:3310" user="root" password="root" />
</writeHost>
2、重啓mycat服務
啓動MyCat:
./mycat start
查看啓動狀態:
./mycat status
停止:
./mycat stop
重啓:
./mycat restart
服務啓動成功即可。
通過mycat9066管理端口查看後端數據庫情況
輸入:show @@datasource;
可看到讀寫數據庫都配置好了。
navicat連接mycat、master、slave並進行測試
1、navicat連接過程中如果出現錯誤:
刪掉連接重連即可。
2、連接mycat、master、slave
3、在master和slave分別創建database:db1、db2
4、在mycat中創建表bookinfo,user_id是分表鍵
create table bookinfo(
ID char(10),
name varchar(10)
);
在master和slave的db1、db2中可看到bookinfo這個表
5、在bookinfo中插入值
insert into bookinfo (name,user_id) values ('計算機原理','2019091503');
查看mycat的日誌文件:
5讀取bookinfo中的數據
select name,user_id from bookinfo where user_id= ‘2019091501’;
查看mycat日誌信息:
至此,一個簡單的以mycat爲中間件的mysql的讀寫分離就完成了。