日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

配置Mysql实现主从复制与读写分离

發布時間:2023/12/18 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 配置Mysql实现主从复制与读写分离 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境說明

主從復制使用mysql自帶的master與slave機制;讀寫分離使用mysql-proxy實現!

有服務器三臺:s1,s2,s3。

s1為web服務器,裝有httpd,php,mysql,mysql-proxy。

s2為主數據庫服務器(Master),僅裝mysql。

s3為從數據庫服務器(Salve),僅裝mysql。

實現目標

s1上的網站的數據庫讀寫操作分攤到s2和s3上,即s2專門進行寫操作(也可以讀),s3專門進行讀操作;

s2上的數據庫中有數據更新時,自動將變化同步到s3上的數據庫中。

配置主從復制(涉及的服務器:s2,s3)

1.首先在主數據庫服務器(master)s2上進行配置

#編輯mysql配置文件 vim /etc/my.cnf#整體內容如下: [client] default_character_set=utf8[mysqld] default_character_set=utf8 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0server-id=1 #重要,需和副數據庫的id區分開,主為1,副為2 log-bin=mysql-bin #定義二進制log文件,從數據庫將通過讀取二進制log文件來更新 binlog-ignore-db=mysql #定義忽略的數據庫,即不需要同步的數據庫 binlog-do-db=testdb #定義需要同步的數據庫,如果沒有此,將同步所有數據庫(除了上面ignore的數據庫)[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

2.在主數據庫服務器(master)s2上的mysql中創建一個供副數據庫(slave)s3連接的賬號

#在主數據庫服務器上進入mysql命令行 mysql -u root -p (輸入密碼)#成功進入mysql命令行,新建一個用戶 mysql>grant replication slave on *.* to '用戶名'@'副數據庫的IP地址' identified by '密碼';#查看創建用戶是否成功 mysql>select user,host from mysql.user;

?

3.重啟主數據庫服務器上的mysql服務

service mysqld restart

4.記錄主數據庫服務器的master狀態,在配置從服務器時需要使用到

#同樣進入mysql命令行 mysql>show master status;

類似于此內容:

記下Flie和Position。需要注意的是這兩個值在mysql重啟后變化。所以在第一次配置從服務器時,需要注意了!

主數據庫的配置完成,現在開始從數據庫服務器。

5.配置從數據庫服務器上的my.cnf文件

vim /etc/my.cnf#整體內容如: [client] default_character_set=utf8[mysqld] default_character_set=utf8 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0server-id=2 #重要,與主數據上id不一樣[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

6.重啟從數據庫服務器的mysqld

service mysqld restart

?

7.進入mysql命令行,執行change master to命令

#進入mysql mysql -u root -p (輸入密碼)#進入mysql后,先停止slave mysql>slave stop; mysql>change master to>master_host='主數據庫的ip地址或者hostname',>master_user='主數據庫中允許從數據庫連接它的用戶名',>master_password='這里是密碼',>master_log_file='mysql-bin.000004',>master_log_pos=261;#master_log_file,master_log_pos即上面使用show master status看到的信息 mysql>slave start;#查看slave狀態 mysql>show slave status\G;

在看到的slave狀態中,關鍵信息為:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果這兩項都為Yes,說明主從之間復制ok了。

貼上我的slave status:

mysql> show slave status\G; *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: s2Master_User: userssMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000004Read_Master_Log_Pos: 2308873Relay_Log_File: mysqld-relay-bin.000288Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000004Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 2308873Relay_Log_Space: 5650Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: 1 row in set (0.00 sec)

最后,可以測試下,在主數據庫中創建一個數據庫,創建一張表,插入點數據,然后在從數據庫中看時候有數據!

配置讀寫分離(涉及的服務器s1,s2,s3)

1.首先我們想要在web服務器上安裝mysql-proxy,并配置好它,mysql-proxy官網下載

#進入mysqlproxy的目錄 cd /opt/mysql-proxy

?

#創建mysqlproxy.cnf文件 vim mysqlproxy.cnf #整體內容如下 [mysql-proxy] user=mysql daemon=true keepalive=true log-level=message log-file=/opt/mysql-proxy/mysqlproxy.log pid-file=/opt/mysql-proxy/mysqlproxy.pid proxy-backend-addresses=主數據庫服務器IP:端口(默認3306) proxy-read-only-backend-addresses=從數據庫服務器IP:端口(默認3306)

?

#編輯環境變量文件 vim /etc/profile

?

#在最后加入下列兩行內容(路徑自行修改) PATH=/opt/mysql-proxy/bin:/opt/mysql-proxy/share/doc/mysql-proxy:$PATH export PATH #可以創建一個簡單的腳本,以便于開機啟動 vim mysqlproxy #內容如下: #!/bin/bash mysql-proxy --defaults-file=/opt/mysql-proxy/mysqlproxy.cnf #創建好后,把mysqlproxy文件復制到/opt/mysql-proxy/bin目錄下#在開機啟動項中,可以加入mysqlproxy vim etc/rc.d/rc.local #加入: mysqlproxy#確認mysqlproxy文件是否具有可執行權限 #最后修改rw-splitting.lua文件 vim /opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua #修改這兩個值 min_idle_connections = 1, //默認為4 max_idle_connections = 1, //默認為8

?

2.在主數據庫服務器上進入mysql命令行,創建一個用戶

mysql -u root -p#進入mysql后 mysql>grant all on *.* to '用戶名'@'web服務器地址' identified by '密碼';

此時由于主數據庫和從數據庫是主從復制,從數據庫上應該已經有了上面新建的用戶了。

?

如果還沒配置主從復制,在從服務器上執行下grant就好。

重要配置已經完成了,最后就要確定下防火墻(iptables)了。

web服務器的mysql-proxy默認端口為4040,主從兩個數據庫3306端口。

測試讀寫分離

在web服務器上通過mysql連接4040端口:

#用戶名為上面第二步中新建的用戶,hostname為其對應的hostname(即web服務器地址) mysql -u 用戶名 -p -P 4040 -h hostname

輸入密碼后,通過web服務器就能連接到s2,所做的變更將直接在s2上生效,而s3將通過主從復制,實現同步!

?

注:web服務器的mysql的3306端口,不參與讀寫分離主從復制!web服務器上的網站程序數據庫只需要連接4040端口即可!

?

?

?

?

轉載于:https://www.cnblogs.com/keheng/articles/3721107.html

總結

以上是生活随笔為你收集整理的配置Mysql实现主从复制与读写分离的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。