本文目錄一覽:
- 1、Ubuntu配置Mysql主從數據庫
- 2、MySQL 主從,5 分鐘帶你掌握
- 3、如何用mysql搭配主從數據庫
- 4、centos 怎麼搭建mysql主從庫
- 5、一台linux服務器怎麼安裝多個mysql數據庫並配置主從
Ubuntu配置Mysql主從數據庫
本次環境:虛擬機下
服務器:Ubuntu
14.04
LTS
數據庫:
5.5.37
端口:3306
主IP:192.168.63.133
從IP:192.168.63.134
授權賬號:
user:suxh
password:111111
好了交代完環境:我們直接配置:
第一步:主從兩台服務器要有同樣的數據庫(需要同步的)這裡用的是backup
數據庫(不多說了,在同步開始前,把主庫的複製一份到從庫就行了)
第二步配置主(master)數據庫
編輯/etc/my.cnf
主要是開啟二進制日誌
和設置要同步的數據庫
等一些參數
#
binary
logging
format
–
mixed
recommended
binlog_format=mixed
binlog-ignore-db=mysql
binlog-do-db=backup
#
required
unique
id
between
1
and
2^32
–
1
#
defaults
to
1
if
master-host
is
not
set
#
but
will
not
function
as
a
master
if
omitted
server-id
=
1
參數解釋下:
server-id
這個是唯一的不能跟從服務器相同。
binlog_format
二進制文件的格式
binlog_ignore-db
忽略的數據庫
binlog-do-db
要同步的數據庫
設置完了以後
重啟數據庫就可以了。
第三步從數據庫:
同樣修改/etc/my.cnf
在mysql
版本5.1.7
不支持master-host」類似的參數;
所以這裡只要配置server-id=2
就可以了
然後登陸從數據庫設置
change
master
to
master_host=’192.168.63.133′,
master_user=’suxh’,
master_password=’111111′;
slave
start;
基本配置就好了。這是我的簡要筆記。
MySQL 主從,5 分鐘帶你掌握
MySQL 主從一直是面試常客,裏面的知識點雖然基礎,但是能回答全的同學不多。
比如樓哥之前面試小米,就被問到過主從複製的原理,以及主從延遲的解決方案,因為回答的非常不錯,給面試官留下非常好的印象。你之前面試,有遇到過哪些 MySQL 主從的問題呢?
所謂 MySQL 主從,就是建立兩個完全一樣的數據庫,一個是主庫,一個是從庫, 主庫對外提供讀寫的操作,從庫對外提供讀的操作 ,下面是一主一從模式:
對於數據庫單機部署,在 4 核 8G 的機器上運行 MySQL 5.7 時,大概可以支撐 500 的 TPS 和 10000 的 QPS, 當遇到一些活動時,查詢流量驟然,就需要進行主從分離。
大部分系統的訪問模型是讀多寫少,讀寫請求量的差距可能達到幾個數量級,所以我們可以通過一主多從的方式, 主庫只負責寫入和部分核心邏輯的查詢,多個從庫只負責查詢,提升查詢性能,降低主庫壓力。
MySQL 主從還能做到服務高可用,當主庫宕機時,從庫可以切成主庫,保證服務的高可用,然後主庫也可以做數據的容災備份。
整體場景總結如下:
MySQL 的主從複製是依賴於 binlog 的,也就是記錄 MySQL 上的所有變化並以二進制形式保存在磁盤上二進制日誌文件。
主從複製就是將 binlog 中的數據從主庫傳輸到從庫上,一般這個過程是異步的,即主庫上的操作不會等待 binlog 同步的完成。
詳細流程如下:
當主庫和從庫數據同步時,突然中斷怎麼辦?因為主庫與從庫之間維持了一個長鏈接,主庫內部有一個線程,專門服務於從庫的這個長鏈接的。
對於下面的情況,假如主庫執行如下 SQL,其中 a 和 create_time 都是索引:
我們知道,數據選擇了 a 索引和選擇 create_time 索引,最後 limit 1 出來的數據一般是不一樣的。
所以就會存在這種情況:在 binlog = statement 格式時,主庫在執行這條 SQL 時,使用的是索引 a,而從庫在執行這條 SQL 時,使用了索引 create_time,最後主從數據不一致了。
那麼我們改如何解決呢?
可以把 binlog 格式修改為 row,row 格式的 binlog 日誌記錄的不是 SQL 原文,而是兩個 event:Table_map 和 Delete_rows。
Table_map event 說明要操作的表,Delete_rows event用於定義要刪除的行為,記錄刪除的具體行數。 row 格式的 binlog 記錄的就是要刪除的主鍵 ID 信息,因此不會出現主從不一致的問題。
但是如果 SQL 刪除 10 萬行數據,使用 row 格式就會很占空間的,10 萬條數據都在 binlog 裏面,寫 binlog 的時候也很耗 IO。但是 statement 格式的 binlog 可能會導致數據不一致。
設計 MySQL 的大叔想了一個折中的方案,mixed 格式的 binlog,其實就是 row 和 statement 格式混合使用, 當 MySQL 判斷可能數據不一致時,就用 row 格式,否則使用就用 statement 格式。
有時候我們遇到從數據庫中獲取不到信息的詭異問題時,會糾結於代碼中是否有一些邏輯會把之前寫入的內容刪除,但是你又會發現,過了一段時間再去查詢時又可以讀到數據了,這基本上就是主從延遲在作怪。
主從延遲,其實就是「從庫回放」 完成的時間,與 「主庫寫 binlog」 完成時間的差值, 會導致從庫查詢的數據,和主庫的不一致 。
談到 MySQL 數據庫主從同步延遲原理,得從 MySQL 的主從複製原理說起:
總結一下主從延遲的主要原因 :主從延遲主要是出現在 「relay log 回放」 這一步,當主庫的 TPS 並發較高,產生的 DDL 數量超過從庫一個 SQL 線程所能承受的範圍,那麼延時就產生了,當然還有就是可能與從庫的大型 query 語句產生了鎖等待。
我們一般會把從庫落後的時間作為一個重點的數據庫指標做監控和報警,正常的時間是在毫秒級別,一旦落後的時間達到了秒級別就需要告警了。
解決該問題的方法,除了縮短主從延遲的時間,還有一些其它的方法,基本原理都是盡量不查詢從庫。
具體解決方案如下:
在實際應用場景中,對於一些非常核心的場景,比如庫存,支付訂單等,需要直接查詢從庫,其它非核心場景,就不要去查主庫了。
兩台機器 A 和 B,A 為主庫,負責讀寫,B 為從庫,負責讀數據。
如果 A 庫發生故障,B 庫成為主庫負責讀寫,修復故障後,A 成為從庫,主庫 B 同步數據到從庫 A。
一台主庫多台從庫,A 為主庫,負責讀寫,B、C、D為從庫,負責讀數據。
如果 A 庫發生故障,B 庫成為主庫負責讀寫,C、D負責讀,修復故障後,A 也成為從庫,主庫 B 同步數據到從庫 A。
如何用mysql搭配主從數據庫
兩台機器,192.168.162.128(主) 192.168.162.130(從)
配置主的配置文件
vi /etc/my.cnf
創建複製用戶並授權給從服務器
grant replication slave on *.* to ‘rpl’@’192.168.162.130’ identified by ‘123456’;
重啟主服務器的MySQL /etc/init.d/mysqld restart
查看master信息: 進入MySQL show master status \G;
修改從庫配置文件
vi /etc/my.cnf
重啟從服務器MySQL,進入MySQL
指定主服務器IP等信息
change master to master_host=’192.168.162.128 ‘,master_user=’rpl’,master_password=’123456′,master_log_file=’mysql-bin.000001′,master_log_pos=647;
啟動slave :start slave;
查看slave狀態:show slave status \G;
報錯Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work
意思是主和從必須都要有不同的uuid,我們分別去查看下主從的uuid
主:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312
查看從庫uuid 從庫uuid:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312
可以看出是真的一樣,原因在於 我是先安裝了一個虛擬機並裝好MySQL,後面有複製了一遍,作為從服務器,所以導致了這個UUID是一樣的。
接下來就是解決這個UUID問題,將從庫上的auto.cnf 備份下。然後重啟從庫。再看下從庫的UUID
[auto]
server-uuid=2e9c834a-1eb2-11e7-864b-000c2928472e
再次查看從庫狀態
從庫狀態正常了
11.測試主從是否正常
主庫上創建一個測試庫,test :create database test;
創建測試表:
create table test.test(
id int,
username varchar(10)
)ENGINE=’innodb’
12.查看從庫:
正常,說明主從搭建成功
centos 怎麼搭建mysql主從庫
在配置Mysql數據庫主從複製集群的時候要保證:
1.主從服務器操作系統版本和位數一致。
2.Mysql版本一致。
為了保證穩定性,最好服務器操作系統和Mysql數據庫環境一致。
CentOS服務器上Mysql的安裝方法可以參見博客:
服務器配置:
Master:192.168.1.18
Slave:192.168.1.16
Master(192.168.1.18)服務器:
1.編輯/etc/my.cnf
[root@jhq0229 ~]# vim /etc/my.cnf
2.配置
[plain] view plain copy print?
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#主從複製配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#需要備份的數據庫
binlog-do-db=orders
#不需要備份的數據庫
binlog-ignore-db=mysql
#啟動二進制文件
log-bin=mysql-bin
#服務器ID
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
若沒有配置binlog-do-db和binlog_ignore_db,表示備份全部數據庫。
3.重啟Mysqld服務
[root@jhq0229 ~]# service mysqld restart
4.為從Mysql創建用戶
登錄
[root@jhq0229 ~]# mysql -uroot -p
Enter password:
創建用戶
mysql create user ‘mastj’@’192.168.1.16’ identified by ‘123456’;
配置主從複製權限
mysql grant replication slave on *.* to ‘mastj’@’192.168.1.16’ identified by ‘123456’;
若orders數據庫中已經有數據,還需要:
鎖定數據庫
mysql flush tables with read lock;
將數據導入到從數據庫,方法有多種,我是用Navicat複製的,複製完成後:
查看master狀態並解鎖:
[html] view plain copy print?
mysql show master status;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000003 | 2005 | orders | mysql | |
+——————+———-+————–+——————+——————-+
1 row in set (0.00 sec)
mysql unlock tables;
Slave(192.168.1.16)服務器:
1.配置服務ID
[root@jhq0113 ~]# vim /etc/my.cnf
在[mysqld]下面加入
server-id=2
重啟Mysql服務
[root@jhq0113 ~]# service mysqld restart
2.配置複製
登錄mysql
[root@jhq0113 ~]# mysql -uroot -p
執行
mysql change master to master_host=’192.168.1.18′,
master_user=’mastj’,
master_password=’123456′,
master_port=3306,
master_log_file=’mysql-bin.000003′,
master_log_pos=2005,
master_connect_retry=10;
參數詳解:
master_host:主服務器的IP。
master_user:配置主服務器時建立的用戶名
master_password:用戶密碼
master_port:主服務器mysql端口,如果未曾修改,默認即可。
master_log_file:日誌文件名稱,填寫查看master狀態時顯示的File
master_log_pos:日誌位置,填寫查看master狀態時顯示的Position
master_connect_retry:重連次數
啟動進程
mysql start slave;
檢查主從複製狀態
[plain] view plain copy print?
mysql show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.18
Master_User: mastj
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 2369
Relay_Log_File: jhq0113-relay-bin.000002
Relay_Log_Pos: 647
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
若Slave_IO_Running和Slave_SQL_Running均為Yes,則表示連接正常。
此時就可以測試主從複製了。
一台linux服務器怎麼安裝多個mysql數據庫並配置主從
1、關閉Liunx系統的防火牆,如果忘了,你下面的測試連接必定會失敗,切記,切記,切記。
2、yum安裝lrzsz和cmake
yum -y install lrzsz;
yum -y install cmake;
首先熟悉MySql數據庫,很多人都是直接安裝原生版的MySql數據庫(就是官網上下載的數據庫安裝包),也有人用的是MySql的衍生版數據庫,如percona,我用的就是這種,下面我會分別說明原生版和衍生版MySql數據庫的安裝和主從配置。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/289470.html