首頁 > 資料庫 > mysql教程 > 淺談Mysql5.7中怎麼搭建主從複製?

淺談Mysql5.7中怎麼搭建主從複製?

青灯夜游
發布: 2021-09-06 18:58:38
轉載
2315 人瀏覽過

Mysql5.7中怎麼搭建主從複製?以下這篇文章帶大家了解Mysql5.7中主從複製搭建步驟,希望對大家有幫助!

淺談Mysql5.7中怎麼搭建主從複製?

一、概述​​

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

為了避免服務的不可用以及保障數據的安全可靠性,我們至少需要部署兩台或兩台以上伺服器來儲存資料庫數據,也就是我們需要將資料複製多份部署在多台不同的伺服器上,即使有一台伺服器發生故障了,其他伺服器依然可以繼續提供服務.
MySQL提供了主從複製功能以提高服務的可用性與資料的安全可靠性.

主從複製是指伺服器分為主伺服器和從伺服器,主伺服器負責讀取和寫,從伺服器只負責讀,主從複製也叫master/slave,master是主,slave是從,但是並沒有強制,也就是說從也可以寫,主也可以讀,只不過一般我們不會這麼做。 【相關推薦:mysql影片教學

二、主從複製架構

一主多從架構:
淺談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
登入後複製

更多编程相关知识,请访问:编程入门!!

以上是淺談Mysql5.7中怎麼搭建主從複製?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板