Mysql主從同步實戰(一)【知其然】

小橘子2222發表於2019-03-29

前言

Mysql主從同步實戰,知其然,知其所以然也是很重要的,不然你永遠無法進階,但是,俗話說學會走前要學會爬,在大多數的中小型公司中,業務需要用到某一項技術,是沒有太多的時間給你慢慢研究其原理的,大多是囫圇吞棗的看一下,找點攻略,快速搭建起來,先幹活再說,至於後期的擴充套件和優化那就是慢慢來的事情,事有輕重緩急,我們要結合自身所處的環境來調整才能不斷的前行,那麼今天我們就來爬一爬

實戰

準備

軟體

mysql5.7.2 cdn.mysql.com//Downloads/…

硬體
主機配置 IP地址 作業系統 用途 部署路徑
2.6GHz(1core)記憶體2G 10.211.55.7 Centos7.0 mysql-masterr /usr/local/mysql
2.6GHz(1core)記憶體2G 10.211.55.13 Centos7.0 mysql-slave /usr/local/mysql

部署

mysql安裝

# 上傳mysql的tar包
re -be 
# 解壓上傳的命令
tar -xvf  https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar
cd  https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64
# 建立mysql安裝以及資料儲存的目錄
mkdir /usr/local/mysql
mkdir /usr/local/mysql/data  
mv * /usr/local/mysql
# 刪除可能存在的mysql rpm包
rpm -qa|grep -i mysql
rpm -qa | grep maridb
yum remove  mysql mysql-server mysql-libs mysql-server
rpm -e --nodeps `rpm -qa | grep mysql`
rpm -e --nodeps `rpm -qa | grep maridb`
# 知道可能遺留的mysql相關檔案,rm掉
find / -name mysql 
rpm -qa|grep mysql
# 因為我們是使用原始碼的方式安裝,所有需要建立mysql使用者組
userdel mysql 
groupdel mysql
groupadd mysql    
mkdir /usr/local/mysql
useradd -g mysql -d /usr/local/mysql mysql 
# 編譯原始碼
sh /usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
# 編譯成功後會在控制檯看到列印的mysql的臨時密碼,記住,後面需要用到
# 啟動mysql
sh /usr/local/mysql/support-files/mysql.server start
# 控制檯列印success成功啟動
# 建立mysql客戶端軟連結
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
# 修改密碼,輸入上面步驟控制檯列印的臨時密碼
mysql -u root -p
set password = password("mysql");
# 重新整理快取
flush privileges;
# 授權遠端訪問
grant all privileges on *.* to 'root'@'%' identified by 'mysql';
# 檢視防火牆狀態
firewall-cmd --state
# 停止防火請
systemctl stop firewalld.service
# 禁止防火牆開機啟動
systemctl disable firewalld.service 
# 配置mysql服務開機自動啟動
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 
# 增加執行許可權,檢查開機啟動列表,沒有則加入
chmod 755 /etc/init.d/mysqld
chkconfig --list mysqld 
chkconfig --add mysqld
chkconfig mysqld on
# 以後mysql的啟動就可以使用下面命令啟動停止了
service mysqld start/stop/restart
複製程式碼

配置一

mysql-master配置

遇到的問題:
1:很多文章都會告訴你在 /etc/ 或者 安裝目錄的support-file下面有my.cnf配置檔案,但是我們安裝版本為5.7的時候怎麼都找不到,後來經過查閱資料,發現5.7版本的mysql已經不自帶這個配置檔案了,所以需要自己手動配置

touch /etc/my.cnf
chmod 644 /etc/my.cnf
# 如果遇到許可權問題請使用root賬戶
vim /etc/my.cnf
# 寫入內容
# mysql主節點編號
[mysqld] 
server-id = 1 #Mysql服務的唯一編號 每個mysql服務Id需唯一
log-bin=mysql-bin # logbin的名字
binlog-do-db=test03 #需要同步的資料庫的名字
binlog-do-db=test05 #需要同步的資料庫的名字
binlog-ignore-db=test01 #不需要同步的資料庫的名字
log-slave-updates=1 # log更新間隔
slave-skip-errors=1 # 是跳過錯誤,繼續執行復制操作(可選)
複製程式碼

mysql-slave配置

[mysqld] 
#Mysql服務的唯一編號 每個mysql服務Id需唯一
server-id = 2
# read_only=1只讀模式,可以限定普通使用者進行資料修改的操作,但不會限定具有super許可權的使用者(如超級管理員root使用者)的資料修改操作。如果想保證super使用者也不能寫操作,就可以就需要執行給所有的表加讀鎖的命令 “flush tables with read lock;”
read_only = 1
複製程式碼

重啟 service mysqld restart

配置二

mysql-master配置

[mysqld] 
#Mysql服務的唯一編號 每個mysql服務Id需唯一
server-id = 1
log-bin=mysql-bin # logbin的名字
複製程式碼

mysql-slave配置

[mysqld] 
#Mysql服務的唯一編號 每個mysql服務Id需唯一
server-id = 2
# read_only=1只讀模式,可以限定普通使用者進行資料修改的操作,但不會限定具有super許可權的使用者(如超級管理員root使用者)的資料修改操作。如果想保證super使用者也不能寫操作,就可以就需要執行給所有的表加讀鎖的命令 “flush tables with read lock;”
read_only = 1
replicate-do-db=test02 #需要複製的資料庫名,如果複製多個資料庫,重複設定這個選項即可
replicate-ignore-db=test05 #需要複製的資料庫名,如果複製多個資料庫,重複設定這個選項即可
複製程式碼

重啟 service mysqld restart

設定主從同步

操作主資料庫

1:使用root使用者進入mysql建立同步的賬戶並且賦權

CREATE USER 'slave'@'%' IDENTIFIED BY 'mysql';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
# 檢視賦權狀態
use mysql;
select  User,authentication_string,Host from user;
複製程式碼

Mysql主從同步實戰(一)【知其然】

# 檢視 日誌開啟狀態
show variables like 'log_bin';
複製程式碼

Mysql主從同步實戰(一)【知其然】
成功開啟

# 檢視主節點狀態
show master status;
複製程式碼

Mysql主從同步實戰(一)【知其然】
記住file那麼的名字和position的值,因為主從同步,從資料庫是通過讀取主資料庫的日誌檔案來完成同步的,所以需要檔名字和日誌的當前位置

操作從資料庫

# 停止正在進行的slave(如果有,此方法也用於修改slave的值(如果引數不對))
stop slave;
# 需要主機名,上面步驟的賬戶密碼以及日誌檔名字和位置(請根據實際情況自行修改)
change master to master_host='10.211.55.7', master_user='slave', master_password='mysql', master_log_file='mysql-bin.000003', master_log_pos=1639;
# 啟動
start slave;
# 檢視狀態
show slave status\G;
複製程式碼

如果一切配置正常那麼則會看到:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Mysql主從同步實戰(一)【知其然】
如果遇到 no的情況一般會原因有:
1:機器網路不通
2:配置項寫錯,例如ip,密碼等
3:防火牆問題

優劣勢對比

在master上設定binlog_do_弊端:
1、過濾操作帶來的負載都在master上
2、無法做基於時間點的複製(利用binlog)
建議使用配置二,但是我使用的是配置一

測試

分別查詢主從資料庫

use test03;
select * from test01;
複製程式碼

Mysql主從同步實戰(一)【知其然】
在主資料庫插入一條資料

Mysql主從同步實戰(一)【知其然】
查詢從資料庫

Mysql主從同步實戰(一)【知其然】
主從同步成功

總結

今天的實戰就這麼結束了,怎麼樣有沒有收穫,那麼現在我們學會了爬,下一篇文件我們就要學一學怎麼走,怎麼跑了,下篇預告MySQL主從同步知其然,知其所以然。

參考部落格:
mysql安裝 blog.csdn.net/weixin_3828…

相關文章