前戲:mysql
mysql的基本命令複習linux
1.啓動mysql systemctl start mariadb 2.linux客戶端鏈接本身 mysql -uroot -p -h 127.0.0.1 3.遠程連接mysql服務端 mysql -uroot -p -h 192.168.11.37 4.修改mysql密碼 MariaDB [(none)]> set password = PASSWORD('redhat123'); 5.建立mysql用戶 create user xiaochun@'%' identified by 'xc666'; 6.查詢mysql庫中的用戶信息 use mysql; select host,user,password from user; 7.受權語句 給小春這個用戶,授予建立數據庫的權限 mysql使用grant命令對帳戶進行受權,grant命令常見格式以下 grant 權限 on 數據庫.表名 to 帳戶@主機名 對特定數據庫中的特定表受權 grant 權限 on 數據庫.* to 帳戶@主機名 對特定數據庫中的全部表給與受權 grant 權限1,權限2,權限3 on *.* to 帳戶@主機名 對全部庫中的全部表給與多個受權 grant all privileges on *.* to 帳戶@主機名 對全部庫和全部表受權全部權限 #授予小春建立的權限,對於全部的庫表生效 grant create on *.* to xiaochun@"%" identified by 'xc666'; #授予小春用戶,只有建立mymysql數據庫的權限 grant create on mymysql.* to xiaochun@"%" identified by 'xc666'; #授予用戶最大的權限,全部的權限 grant all privileges on *.* to username@'%' identified by 'password'; 8.移除權限 MariaDB [(none)]> revoke all privileges on *.* from xiaochun@"%" identified by 'xc666';
步驟:sql
1. 主數據庫寫入數據以後, 會有data changes(數據變化)記錄 2. 有變化記錄以後,將增刪改的一些sql語句記錄到本地的Binary log(二進制日誌)中 3. 從庫會一直開啓着一個線程 4. 經過線程去讀取這個二進制日誌的內容 5. 從庫會將數據寫入到本身的Relay log(中繼日誌)中 6. 從庫會將中繼日誌中的操做轉化爲SQL thread(SQL語句) 7. 經過轉化的SQL語句寫入到本身的數據庫, 兩邊的數據就一致了 主從複製原理7步曲
192.168.1.250 主 192.168.1.251 從
1 中止主服務器mariadb數據庫服務數據庫
systemctl stop mariadb
2 修改主服務器配置文件vim
vim /etc/my.cnf服務器
3.新建用於主從同步的用戶iris,容許登陸的從庫是'192.168.1.251'ide
create user iris@'%' identified by '123456'; # 若是要指定192.168.1.251 ,將%改爲192.168.1.251便可
4.給從庫帳號受權,受權給iris從庫複製的權限,在192.168.1.251機器上覆制
測試
grant replication slave on *.* to iris@'%';
replication 複製
spa
select user,host from mysql.user;
6 實現對主數據庫鎖表只讀,防止數據寫入,數據複製失敗線程
flush table with read lock;
7.檢查主庫的狀態, 並記錄下日誌文件的名字,和位置
MariaDB [(none)]> show master status;
8 鎖表後,必定要單獨再打開一個SSH窗口,導出數據庫的全部數據
10 關閉數據庫服務
systemctl stop mariadb
11 在從庫192.168.1.97上打開/etc/my.cnf
[mysqld] server-id=3 read-only=true
12 重啓數據庫
systemctl restart mariadb
13 導入主庫傳過來的數據庫文件,保持從庫的數據與主庫一致
mysql -u root -p
source /opt/book_manage_system.sql
14 配置複製的參數,Slave從庫鏈接Master主庫的配置
change master to master_host='192.168.1.251', master_user='iris', master_password='123456', master_log_file='qishi-logbin.000001', master_log_pos=486;
15.啓動從庫的同步開關,測試主從複製的狀況
start slave;
16 查看複製狀態
show slave status\G;
注意: 若是從庫上面的普通用戶沒法在從庫上登陸,就從新建立一個用戶 create user 'xiaochun'@'%' identified by 'xc666'; grant replication slave on *.* to 'xiaochun'@'%';
此時主從同步就已經完成配置了,雙方都登陸iris帳號,在主庫建立一個庫,再看從庫已經成功複製過來了,再到從庫上面嘗試建立庫或寫入數據,沒法寫入,由於從庫設置了只讀
tip:
注意此處還未配置從庫的只讀模式,只需在slave服務器上配置/etc/my.cnf,加上如下配置,而且在slave上建立普通用戶,使用普通用戶主從同步便可達到只讀的效果
若是用root用戶,沒法達到readonly,這是一個坑
[mysqld] character-set-server=utf8 collation-server=utf8_general_ci log-error=/var/log/mysqld.log server-id=3 read-only=true [client] default-character-set=utf8 [mysql] default-character-set=utf8