1. 程式人生 > 其它 >MySQL Replication(資料同步技術)

MySQL Replication(資料同步技術)

MySQL Replication(資料同步技術)

A 到 B 完成主從複製,意思是資料同步技術 從讀取主的二進位制日誌檔案,按照日誌中記錄對從庫進行同樣的操作

複製型別:

非同步複製 :預設的複製是非同步,主執行完後立刻將結果返給客戶端,不關心從是否接收或處理

全同步複製:當主執行完一個事務,從庫都執行完該事務才返回給客戶端。

半同步複製:介於非同步與全同步之間,主庫在執行完客戶端提交的事務後不是立刻返回給客戶端,而是等待至少一個從庫接收到並寫到日誌中返回客戶端(最好在低延時的網路中使用)

一般使用非同步複製的方式

雙機部署環境:

主節點 192.168.80.24
從節點 192.168.80.26

----------------

首先要先安裝mysql資料庫

1,關閉防火牆和安全機制

systemctl  stop firewalld
setenforce 0
iptables -F

2,配置ntp時間同步伺服器並啟動

yum -y install  ntp
1,主節點做
vim /etc/ntp.conf
server 127.127.1.0
fudge 127.127.1.0 stratum 8
systemctl start ntpd
2,從節點
ntpdate 主節點IP

(第二種方法,使用網際網路上時間同步伺服器(每個節點都使用,方便便捷)
crontab -e
* */5 * * * /usr/sbin/ntpdate pool.ntp.org > /dev/null 2>&1 //每隔5小時同步一下時間

3,安裝mysql安裝包

安裝 mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

1,將系統中只帶的mariadb刪除
rpm -q mysql mysql-server mariadb mariadb-server
rpm -e .......
2,上傳mysql二進位制包解壓
tar xf mysql-5.7.24-linux-glibc2.17-x86_64-minimal.tar.xz -C /usr/local/
cd /usr/local
mv mysql-5.7.24-linux-glibc2.17-x86_64-minimal/ mysql
3,建立mysql使用者並賦予許可權
useradd -M -s /sbin/nologin mysql
chown -R mysql:mysql /usr/local/mysql/
4,初始化資料庫
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize

5,修改配置檔案
cat /etc/my.cnf
[mysqld]
port=3306
datadir=/usr/local/mysql/data
max_connections = 100
default-storage-engine = InnoDB
socket=/tmp/mysql.sock
character-set-server=utf8
[mysqld_safe]
log-error=/usr/local/mysql/data/mysql.log
pid-file=/usr/local/mysql/data/mysql.pid

6,做啟動檔案
cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
ln -s /usr/local/mysql/bin/* /usr/local/bin/
systemctl start mysqld

7,修改密碼
####mysqladmin -uroot -p'複製的初始密碼' password'123456'
mysql>alter user user() identified by "123456" ;
#登陸:
mysql -uroot -p'123456'

開始配置主從

4,配置主mysql並重啟

vim /etc/my.cnf
server-id=1
log-bin=mysql-binlog
log-slave-updates=true

systemctl restart mysqld

5,主建立replication使用者

進入資料庫mysql 
>grant replication slave on *.* to 'myslave'@'192.168.80.%' identified by '123456';
>flush privileges;
> show master status;

replication slave :用於複製從屬伺服器(從主伺服器中讀取二進位制日誌事件許可權)
測試是否成功
從 連線一下 主。如果成功登陸則沒有問題
mysql -u myslave -p123456 -h 192.168.80.24

補充:生產環境下,主執行過一段時間,已經存在資料,為了保證資料一致性,需要先備份。兩種方式,直接備份資料檔案或者mysqldump工具備份

6,從配置並重啟

vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index

補充:如若有多臺從,每一臺都需要配置,並只修改server-id編號即可

systemctl restart mysqld

7,從進入資料庫中配置

進入從資料庫
>stop slave; //先停掉從的角色
>change master to master_host='192.168.200.115',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=477;
//配置新的從角色
>start slave; //啟動角色
>show slave status\G //檢視角色資訊

補充:清除角色 >reset slave;

8.測試:在主中建立一個庫,看從中是否複製成功

進入主資料庫
>create database sampdb;
>use sampdb;
>create table new(name char(20),phone char(20));
進入從資料庫
>show databases;

9.補充注意:主從複製,只是一種資料同步技術,不是架構;

如果是問資料庫架構是如何,應該再加上HA(高可用),如下列舉兩個架構

  • MySQL主主複製+Keepalived高可用
  • MySQL+DRBD+Heartbeat