CentOS7 下搭建MySQL主從數據庫


1.實驗環境,數據庫的安裝https://www.cnblogs.com/luohanguo/p/9045391.html

  我的數據庫是分開裝的,先拷貝了虛擬機在裝的數據庫,若果是數據庫裝好后拷貝好像uuid是一樣的,所以會有點問題,不過網上有方法我看見了。

角色 IP OS/MySQL版本 有無應用數據
主數據庫 192.168.129.128 CentOS7/5.7
從數據庫 192.168.129.129 CentOS7/5.7

2.主從復制的原理

  從庫生成兩個線程,一個I/O線程,一個SQL線程;i/o線程去請求主庫 的binlog,並將得到的binlog日志寫到relay log(中繼日志) 文件中;主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog;SQL 線程,會讀取relay log文件中的日志,並解析成具體操作,來實現主從的操作一致,而最終數據一致;

  --來自https://blog.csdn.net/php_younger/article/details/59673879

3.用途

  1)災備

  2)讀寫分離

  3)數據備份

4.差不多MySQL也裝好了,開始配置環境

  首先vim /etc/my.cnf,在里面添加(參數都很容易讀懂(:就不解釋了

log_bin=master-bin
server-id=10086 #不要和別的沖突
expire-logs-days=7
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performation_schema
binlog_ignore_db=sys

  重啟mysql服務,service mysqld restart,進入mysql然后show master status; 這兩個值下面要用

 

  為你的從數據庫添加用戶,密碼有要求,不會就Google        Orz

GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.129.%' identified by ‘password’;

  這時你可以去從數據庫那台虛擬機,然后輸入下面去嘗試連接主數據庫,如果連不了可能是Firewall

mysql -h 主庫的ip -P 端口 -u repl -p

  試試下面的和3306做朋友

# 看看你的mysql端口開了沒
firewall-cmd --list-all 
# 沒有就
firewall-cmd --permanent --add-port=3306/tcp
# 重啟
service firewalld restart
# 應該是有了
firewall-cmd --query-port=3306/tcp

  在連接下遠程數據庫,不出意外是可以的!

  在從數據庫那機子上的/etc/my.cnf里輸入

server-id = 10087
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index

  重啟服務,然后進入MySQL,然后

# 執行同步SQL語句
change master to
master_host='192.168.129.128',
master_port=3306, master_user='repl', master_password='密碼', master_log_file='master-bin.000001', master_log_pos=上面那個position;

  再start slave;    你可以在輸入show slave status \G查看狀態,如果這兩個是true就意味着同步了

  試試啊,去主庫闖將數據庫,表,添加屬性,刪除什么的,再去邊上瞅瞅,同步了就是ok了

5.上面已經弄好了,數據庫也同步了,那主從復制有什么用呢?

   簡單來說,主從復制適合與讀多寫少的場景,比如這樣一個簡單的架構相對於單庫可用性,性能,容災都有提升(這就是鈔能力吧):

6.主從數據庫可能會發生不一致的問題,那怎么解決呢?

  發生不一致的場景:https://www.2cto.com/database/201702/593470.html

  簡單的解決方法:https://www.cnblogs.com/lixiansen/p/5667340.html

  解決方法,划重點,常備份

  6.1 鎖庫,flush table with read lock;

  6.2 用mysqldump -h 主機名 -P 端口 -u 用戶 -p --databases 數據庫名 > XXX.sql來備份一個sql文件

  6.3 scp文件名 root@從庫ip:/存儲路徑     再輸入你那個root用戶的密碼

  6.4 查看主庫master的狀態file,position

  6.5 stop slave; set sql_log_bin=0;

  6.6 source你傳過來的sql文件

  6.7  set sql_log_bin=1; flush privileges;

  6.8 重啟下service,不知道有沒有用

  6.9 設置從庫同步,就是那個change master to 再來一遍,記得和6.4的master狀態一樣

  6.10 start slave; 

  6.11 show slave status \G;

兩個都是yes就好了,又同步了!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM