時間:2022-12-15來源:www.caymanbraccottage.com作者:電腦系統城
大型網站為了緩解大量的并發訪問,除了在網站實現分布式負載均衡,還會搭建服務器mysql集群技術,來分擔主數據庫的壓力。在本地電腦能實現這樣的技術嗎,本地windows安裝兩個mysql服務器,配置主從同步也是可以實現的,快來跟著教程測試一下吧。
安裝mysql(這里安裝的是5.5),正常安裝即可。
復制安裝后的目錄d:/mysql/MySQL Server 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)
1 2 3 4 |
#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/" |
修改為
1 2 3 4 5 6 |
#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文件全粘貼過來 |
命令符進入:D:\mysql\mysql_2\bin>
mysqld --install mysql2 --defaults-file='d:\mysql\mysql_2\my.ini'
運行成功,則會顯示Service Successfully installed.
這時候打開任務管理器--服務,可以看到一個mysql2服務。
命令提示符: D:\mysql\mysql_2\bin>net start mysql2 或者在服務中手動開啟
如果報錯1067 可以把C:/ProgramData/MySQL/mysql_2/Data/ 中ib_logfile0、ib_logfile1和ibdata1 刪掉,重啟。
命令提示符: 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 狀態:
1 2 3 4 5 6 7 8 9 10 11 |
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狀態:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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服務器設置為互為主從。
2022-12-10
MySQL修改密碼不成功(無效)的解決方案2022-12-10
MySQL8.0.28數據庫安裝和主從配置說明2022-12-10
Mysql建庫字符集和排序規則及說明