一個windows上安裝兩個mysql伺服器,並做主從同步
一、配置兩個mysql伺服器
1.首先安裝mysql,一筆帶過。
2.複製安裝後的目錄d:/mysql/MySQL Server 5.5 (我安裝的是5.5)到d:/mysql/mysql2
修改mysql2目錄下的my.ini 檔案
[client]
port=3307(安裝資料庫的埠是3306 ,此處修改為3307)
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3307(安裝資料庫的埠是3306 ,此處修改為3307)
#Path to installation directory. All paths are usually resolved relative to this.
basedir="D:/mysql/MySQL Server 5.5/"
#Path to the database root
datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"
修改後
#Path to installation directory. All paths are usually resolved relative to this.
basedir="D:/mysql/mysql_2/" (複製後的目錄)
#Path to the database root
datadir="C:/ProgramData/MySQL/mysql_2/Data/"
(此處注意,在C:/ProgramData/MySQL下新建mysql_2 並把MySQL Server 5.5/下的Data檔案全貼上過來)
3.安裝服務
命令符進入:D:\mysql\mysql_2\bin>
mysqld --install mysql2 --defaults-file='d:\mysql\mysql_2\my.ini'
執行成功,則會顯示Service Successfully installed.
這時候開啟工作管理員--服務,可以看到一個mysql2服務。
4. 開啟服務
命令提示符: D:\mysql\mysql_2\bin>net start mysql2 或者在服務中手動開啟
如果報錯1067 可以把C:/ProgramData/MySQL/mysql_2/Data/ 中ib_logfile0、ib_logfile1和ibdata1 刪掉,重啟。
5. 停止服務
命令提示符: D:\mysql\mysql_2\bin>net stop mysql2 或者在服務中手動停止;
二、設定主從配置:
- 主伺服器(master): IP為127.0.0.1,埠為3306
- 從伺服器(slave): IP為127.0.0.1,埠為3307
將兩個服務都停掉(這邊我將主庫叫做master , 從庫叫做slave):
主伺服器配置:
修改主伺服器的資料庫配置檔案(D:/mysql/MySQL Server 5.5/my.ini),
在 [mysqld] 標籤的最下面,新增如下程式碼:
#需要備份的資料庫
binlog-do-db=test
#不需要備份的資料庫
binlog-ignore-db=mysql
#開啟二進位制日誌
log-bin=mysql-bin
#伺服器id
server-id=1
儲存退出,重啟MySQL主伺服器。
binlog-do-db用於指定需要同步的資料庫,binlog-ignore-db指定不需要同步的資料庫,如果這兩個引數都不設定,則從伺服器會複製主伺服器的所有資料庫。
一般不用root賬號作同步賬號,為此,我們需要在主伺服器上建立一個新的使用者(如 user01,密碼為123456)。
這裡我們用命令列的方式建立,方法如下:
開啟cmd,切換至 D:\mysql\mysql_2\bin,用 root 賬戶連線MySQL主伺服器:
mysql -uroot -p -P3306
建立新使用者:
create user 'user01'@'127.0.0.1' identified by '123456';
(@後面的ip地址為允許連線的客戶端的ip地址。)
然後,給新使用者配置主從複製的許可權:
grant replication slave on *.* to 'user01'@'127.0.0.1' identified by '123456';
mysql> flush privileges;//重新整理許可權
(@後面的ip地址為允許連線的客戶端的ip地址,如果改為 '%',就表示客戶端沒有ip地址的限制)
檢視主伺服器的 master 狀態:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 498 | test | mysql | |
+------------------+----------+--------------+------------------+-------------------+
從伺服器配置:
修改從伺服器的資料庫配置檔案(d:\mysql\mysql_2\my.ini),在 [mysqld] 標籤的最下面,新增如下程式碼:
#埠
port = 3307
#伺服器id
server_id = 2
#開啟二進位制日誌(從伺服器不是必須要開啟二進位制日誌)
log-bin=mysql-bin
儲存退出,重啟MySQL服務。
連線MySQL從伺服器:
mysql -uroot -p -P3307
配置複製的引數:
change master to master_host='127.0.0.1',master_user='user01',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=498;
引數詳解:
master_host: 主伺服器的IP
master_user: 主伺服器上新建立的使用者名稱
master_password: 使用者的密碼
master_port: 主伺服器的埠,如果未曾修改,預設即可。
master_log_file: 主伺服器二進位制日誌檔案的名稱,填寫檢視主伺服器的master狀態時顯示的File的值
master_log_pos: 日誌的位置,填寫檢視主伺服器的master狀態時顯示的Position的值
啟動從伺服器的slave複製功能:
start slave;
檢視從伺服器的slave狀態:
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: user01
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 120
Relay_Log_File: hp-PC-relay-bin.000004
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果 Slave_IO_Running 和 Slave_SQL_Running 的值都為 Yes,則說明主從複製的所有配置已成功,即從伺服器已經可以自動與主伺服器的資料庫資料實現同步了。
此後,只要主伺服器的資料有更新(比如:在 test資料庫中新建了一張表或者表中的資料發生了變化),從伺服器都會自動與主伺服器保持一致。但如果有人刻意改變了從伺服器的資料,主伺服器中的資料並不會同步更新,除非我們把這兩個MySQL伺服器設定為互為主從。