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

前言

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

實戰

準備

軟件

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

硬件
主機配置 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已經不自帶這個配置文件了,因此須要本身手動配置linux

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 restartsql

配置二

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建立同步的帳戶而且賦權vim

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
緩存

若是遇到 no的狀況通常會緣由有:
1:機器網絡不通
2:配置項寫錯,例如ip,密碼等
3:防火牆問題

優劣勢對比

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

測試

分別查詢主從數據庫網絡

use test03;
select * from test01;
複製代碼

在主數據庫插入一條數據

查詢從數據庫

主從同步成功

總結

今天的實戰就這麼結束了,怎麼樣有沒有收穫,那麼如今咱們學會了爬,下一篇文檔咱們就要學一學怎麼走,怎麼跑了,下篇預告MySQL主從同步知其然,知其因此然。ide

參考博客:
mysql安裝 blog.csdn.net/weixin_3828…

相關文章
相關標籤/搜索