MySQL主從複製 搭建
節點設定:
系統:CentOS7
MySQL:最新
192.168.100.101 node01 主
192.168.100.102 node02 從
192.168.100.103 node03 從
簡單原理:
步驟:
第一步:安裝mysql(yum源安裝,最簡單,可自動替換mariaDB)
1.安裝wget命令 --CentOS7不能直接使用yum安裝MySQL
yum install -y wget
2.下載rpm源 --此處為最新mysql版本
wgethttp://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
3.解壓rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
3.安裝mysql
yum -y install mysql-server
4.檢視臨時密碼
cat /var/log/mysqld.log *A temporary password is generated for root@localhost:******
5.修改root密碼
set global validate_password_policy=0;
set global validate_password_length=1;
6.可遠端訪問
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
flush privileges;
7.啟動
systemctl start mysqld.service
預設配置檔案路徑:
配置檔案:/etc/my.cnf
日誌檔案:/var/log/var/log/mysqld.log
服務啟動指令碼:/usr/lib/systemd/system/mysqld.service
socket檔案:/var/run/mysqld/mysqld.pid
第二步:克隆虛擬機器node02,node03
第三步:主從配置
1.在3個mysql上建庫(相同的庫)
create database tmp;
2.修改my.cnf配置檔案
node01(主):
my.cnf新增
log-bin=master-bin --bin_log名稱
binlog-format=ROW --共3種模式,ROW指的是把改變的內容複製過去,而不是把命令在從伺服器上執行一遍,statement指的是在主伺服器上執行的SQL語句,在從伺服器上執行同樣的語句。MySQL預設採用基於語句的複製,效率比較高。mixed指的是預設採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。
server-id=1 --要求各個伺服器的id必須不一樣
binlog-do-db=tmp --同步資料庫名稱
mysql中配置
set global validate_password_policy=0; --授權操作
set global validate_password_length=1;
grant replication slave on *.* to 'root'@'%' identified by '123456'; --允許從伺服器可以複製內容
flush privileges; --重新整理許可權
重啟mysql服務:systemctl restart mysqld.service
登入mysql:mysql -uroot -p123456
檢視binlog名稱及位置:show master status\G --複製一下binlog名稱以及position位置
node02(從):
my.cnf中
log-bin=master-bin --二進位制檔案的名稱
binlog-format=ROW --二進位制檔案的格式
server-id=2 --伺服器的id
mysql中
change master to master_host='192.168.100.101(主節點IP)',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000002(主節點binlog名稱)',master_log_pos=154(position);
start slave;
node03(從):
my.cnf中
log-bin=master-bin --二進位制檔案的名稱
binlog-format=ROW --二進位制檔案的格式
server-id=3 --伺服器的id
mysql中
change master to master_host='192.168.100.101(主節點IP)',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000002(主節點binlog名稱)',master_log_pos=154(position);
start slave;
常見問題:
wget不能安裝(網路問題)
①vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=yes
MM_CONTROLLED=no
②vi /etc/resolve.cnf
nameserver=8.8.8.8
slave_IO_Running:No
①slave設定的監控主節點的binlog檔案配置名稱出錯或位置出錯,重新在從節點的mysql中設定主節點資訊
stop slave
change master to master_host='192.168.100.101(主節點IP)',master_user='root',master_password='123456',master_port=3306,master_log_file='master-bin.000002(主節點binlog名稱)',master_log_pos=154(position);
start salve
②不同節點的UUID相同了,檢視不同節點的/var/lib/mysql/auto.cnf是否相同
如果相同,則將從節點的auto.cnf刪除,它會重新生成一個新的UUID的
Slave_SQL_Running:No
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
start slave;