首頁  >  文章  >  資料庫  >  手把手教你在Mysql5.7中搭建主從複製

手把手教你在Mysql5.7中搭建主從複製

青灯夜游
青灯夜游轉載
2021-08-25 19:28:052834瀏覽

在Mysql5.7中如何搭建主從複製?以下這篇文章跟大家介紹Mysql5.7-主從複製搭建步驟,有需要的朋友可以學習了解一下~

手把手教你在Mysql5.7中搭建主從複製

一、概述​​

#主從複製可以實現對資料庫備份和讀寫分離:

為了避免服務的不可用以及保障資料的安全可靠性,我們至少需要部署兩台或兩台以上伺服器來儲存資料庫數據,也就是我們需要將資料複製多份部署在多台不同的伺服器上,即使有一台伺服器發生故障了,其他伺服器依然可以繼續提供服務.
MySQL提供了主從複製功能以提高服務的可用性與資料的安全可靠性.
主從複製是指伺服器分為主伺服器和從伺服器,主伺服器負責讀取和寫入,從伺服器只負責閱讀,主從複製也叫master /slave,master是主,slave是從,但是並沒有強制,也就是說從也可以寫,主也可以讀,只不過一般我們不這麼做。

二、主從複製架構

一主多從架構:
手把手教你在Mysql5.7中搭建主從複製
多主多從架構:
手把手教你在Mysql5.7中搭建主從複製
主從複製原理:

  1. #當master 主伺服器上的資料改變時,則將其改變寫入二進位事件記錄檔中
  2. salve 從伺服器會在一定時間間隔內對master 主伺服器上的二進位日誌進行探測,探測是否發生過改變,如果偵測到master 主伺服器的二進位事件日誌發生了改變,則開始一個I/O Thread 請求master 二進位事件日誌
  3. 同時master 主伺服器為每個I/O Thread 啟動一個dump Thread,用於向其發送二進位事件日誌
  4. slave 從伺服器將接收到的二進位事件日誌保存到自己本地的中繼日誌檔案中
  5. salve 從伺服器將啟動SQL Thread 從中繼日誌中讀取二進位日誌,在本地重播,使得其數據和主伺服器保持一致;
  6. 最後I/O Thread 和SQL Thread 將進入睡眠狀態,等待下一次被喚醒

三、一主多從搭建

搭建環境:
1. Linux 版本CentOS release 6.9 (Final)
2. mysql-5.7.26-linux-glibc2.12- x86_64.tar.gz下載位址

1.解壓縮mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

#/usr/local下解压
tar xzvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
#重命名文件
mv mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz mysql

#2.建立多實例資料目錄

cd /usr/local/mysql
mkdir data
cd data
#主
mkdir 3306
#从
mkdir 3307

手把手教你在Mysql5.7中搭建主從複製
#3.資料庫初始化

#mysql 安装bin目录下执行
#initialize-insecure 表示不生成MySQL数据库root用户的随机密码,即root密码为空

#初始化3306
./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3306 --user=mysql
#初始化3307
./mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/3307 --user=mysql

若發生錯誤執行
yum install libaio-devel.x86_64
yum -y install numactl手把手教你在Mysql5.7中搭建主從複製
4.建立各個資料庫的設定檔my.cnf

注意:
1.建議在linux下建立檔案防止windows 與linux 編碼不一致
2.不同的實例下設定要修改埠號
3.將修改好的my.cnf分別放至3306、3307資料夾內

[client]
port        = 3306
socket      = /usr/local/mysql/data/3306/mysql.sock
default-character-set=utf8

[mysqld]
port    = 3306
socket  = /usr/local/mysql/data/3306/mysql.sock
datadir = /usr/local/mysql/data/3306
log-error = /usr/local/mysql/data/3306/error.log
pid-file = /usr/local/mysql/data/3306/mysql.pid

character-set-server=utf8
lower_case_table_names=1
autocommit = 1

log-bin=mysql-bin
server-id=3306

5.多實例啟動

切換到/usr/local/mysql-5.7.24/bin目錄下,使用msyqld_safe 指令指定設定檔並啟動MySQL服務:

#其中 --defaults-file 是指定配置文件,& 符合表示后台启动
./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &

6.資料庫初始化配置

分別在各個實例內進行配置如3306:

#客户端连接
./mysql -uroot -p -P3306 -h127.0.0.1
#修改Mysql密码
alter user 'root'@'localhost' identified by 'root';
#授权远程访问(这样远程客户端才能访问)
grant all privileges on *.* to root@'%' identified by 'root';
#刷新配置
flush privileges;

客戶端連線測試
手把手教你在Mysql5.7中搭建主從複製
7.資料庫唯一id配置

1.確定各個執行個體正常啟動無誤後進行主從設定
2.關閉實例分別在各個實例的my.cnf檔案加入以下設定##

#/usr/local/mysql/bin 关闭实例
./mysqladmin -uroot -p -P3307 -h127.0.0.1 shutdown
./mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown

#新加的配置
log-bin=mysql-bin   	#表示启用二进制日志
server-id=3307 		#表示server编号,编号要唯一 建议和端口保持一致

加入完畢後啟動各個實例

./mysqld_safe --defaults-file=/usr/local/mysql/data/3306/my.cnf &

./mysqld_safe --defaults-file=/usr/local/mysql/data/3307/my.cnf &

7.主機設定
1.在主伺服器上建立複製資料的帳號並授權

#在/usr/local/mysql/bin目录下执行 
 ./mysql -uroot -p -P3306 -h127.0.0.1
 grant replication slave on *.* to 'copy'@'%' identified by 'root';

2.查看主伺服器狀態

# mysql主服务器默认初始值:
#			File:mysql-bin.000001
#			Position:154

show master status;

3.如果主服務狀態不是初始狀態,需要重設狀態

reset master;

#7.從機設定

1.

需要登入3306|3307|3308的從機客戶端

#在/usr/local/mysql/bin目录下执行  多台从机‘|’分隔
./mysql -uroot -p -P3308|3309|3310 -h127.0.0.1

2.查看從機狀態

#初始状态:Empty set 
show slave status;

#3.若不是初始狀態,重設

stop slave; 	#停止复制,相当于终止从服务器上的IO和SQL线程
reset slave;

4.設定從機設定主機設定

change master to 
master_host='主机ip',master_user='copy',
master_port=主机端口,master_password='连接主机密码',
master_log_file='mysql-bin.000001',master_log_pos=154;

5.執行開始複製指令

start slave;

6.查看從機狀態

show slave status \G;

手把手教你在Mysql5.7中搭建主從複製
7.测试主从复制

在主数据库中进行创建表,从库同步就算搭建成功了!
手把手教你在Mysql5.7中搭建主從複製
若你在从库进行写操作,则从服务器不再同步主库数据,在从库中执行此命令即可解决!

stop slave;
set global sql_slave_skip_counter =1;
start slave;
show slave status\G;

若主从复制速度较慢的话,执行此命令

 slave-parallel-type=LOGICAL_CLOCK
 slave-parallel-workers=16
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 relay_log_recovery=ON

相关学习推荐:mysql教程(视频)

以上是手把手教你在Mysql5.7中搭建主從複製的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除