前言
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;
複製程式碼
# 檢視 日誌開啟狀態
show variables like 'log_bin';
複製程式碼
成功開啟
# 檢視主節點狀態
show master status;
複製程式碼
記住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
1:機器網路不通
2:配置項寫錯,例如ip,密碼等
3:防火牆問題
優劣勢對比
在master上設定binlog_do_弊端:
1、過濾操作帶來的負載都在master上
2、無法做基於時間點的複製(利用binlog)
建議使用配置二,但是我使用的是配置一
測試
分別查詢主從資料庫
use test03;
select * from test01;
複製程式碼
在主資料庫插入一條資料
查詢從資料庫
主從同步成功
總結
今天的實戰就這麼結束了,怎麼樣有沒有收穫,那麼現在我們學會了爬,下一篇文件我們就要學一學怎麼走,怎麼跑了,下篇預告MySQL主從同步知其然,知其所以然。
參考部落格:
mysql安裝 blog.csdn.net/weixin_3828…