mysql5.7 yum安裝及主從配置(從庫只讀),不重啟主庫添加從庫配置


yum -y remove mysql
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-server
systemctl start mysqld

 

主從都要做:
mysql5.7.x版本后默認yum安裝會生成一個初始密碼
cat /var/log/mysqld.log |grep password
查看初始密碼登錄數據庫后修改密碼
ALTER USER USER() IDENTIFIED BY '新密碼';
flush privileges;


主庫操作:
修改主庫配置文件
/etc/my.conf
[mysqld]下添加
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

server-id=2
log-bin=log
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

expire_logs_days = 30 ##binlog日志過期時間,默認不過期
max_binlog_size = 100M ##binlog日志達到該值后切割,默認1G

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
保存重啟數據庫
systemctl restart mysql

進數據庫創建同步賬號
create user 'sync'@'%' identified by 'Sync!0000';
grant FILe on *.* to 'sync'@'192.168.0.145' identified by 'Sync!0000';
grant replication slave on *.* to 'sync'@'192.168.0.145' identified by 'Sync!0000';
flush privileges;
show master status; 記錄File和Position對應的信息,我這里是log.000006和151

從庫操作:
修改從庫配置文件
[mysqld]下添加
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

server-id=3
log-bin=mysql-bin
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
read_only=1

expire_logs_days = 30 ##binlog日志過期時間,默認不過期
max_binlog_size = 100M ##binlog日志達到該值后切割,默認1G


[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4
保存重啟數據庫
systemctl restart mysql
進入數據庫
stop slave;
change master to master_host='192.168.0.135',master_user='sync',master_password='Sync!0000',master_log_file='log.000003',master_log_pos=154; (最關鍵的一步,將主庫ip,同步賬號的用戶密碼,show master status得到的file、position寫入。在5.7之前的版本這一步的相關參數是寫到配置文件中的,5.7如果再寫進配置文件會報參數錯誤)
start slave;
show slave status \G;

read_only=1只讀模式,可以限定普通用戶進行數據修改的操作,但不會限定具有super權限的用戶(如超級管理員root用戶)的數據修改操作。
如果想保證super用戶也不能寫操作,就可以就需要執行給所有的表加讀鎖的命令 “flush tables with read lock;”。(但是退出mysql進程后 該配置就失效了 root賬號繼續可以寫入,一般遷移時用到)
GRANT select,insert,update,delete ON *.* TO '普通賬號'@'%' IDENTIFIED BY '密碼' ; 給從庫創建一個普通賬號有增刪改查的權限
用這個賬號連接從庫進行添加數據或者刪除數據或者update數據都會失敗。
必須用 指定部分權限的普通用戶才行, 不能給ALL權限,否則就不能做到只讀。
還有不能在末尾加WITH GRANT OPTION,如果加了 可能可以自己給自己加ALL權限。以防萬一不加

至此主庫讀寫,從庫同步+只讀完成
(若root賬號需要遠程連接則GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' ;
FLUSH PRIVILEGES; 允許任何IP訪問)

 

不重啟主庫的情況下新增從庫

xtrabackup需要yum安裝該軟件
xtrabackup是物理備份,備份速度快,不鎖表。為什么不鎖表?因為自身會監控主庫日志,如果有更新的數據,就會先寫到一個文件中,然后再回歸到備份文件中,從而保持數據一致性。
centos7下
先主庫安裝xtra的倉庫
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
再裝2.4.12的最新版本包
yum install percona-xtrabackup-24
(mysql5.7以上需要2.4以上的xtra,如有更新下載最新的xtra)
新建一個專用備份的目錄
mkdir /mysqlbackup
cd /mysqlbackup
備份到該目錄
innobackupex --user=root --password=密碼 ./
拷貝目錄所有文件到新增的從庫服務器
scp -r 2018-11-27_08-20-19/ root@192.168.0.141:/root/

從庫操作
先按照上文修改從庫默認密碼,再改從庫配置文件注意server-id要不同
再停服務,刪datadir(別跑路),把備份改為datadir,賦權限,重啟服務
systemctl stop mysqld
rm -rf /var/lib/mysql
mv 2018-11-27_08-20-19/ /var/lib/mysql
chown mysql.mysql -R /var/lib/mysql
systemctl start mysqld
這回用主庫賬號進去查看(如果主庫有%遠程訪問權限,記得改掉,一會重開只讀賬號),發現主庫的庫都在 就是成功了。
再去主庫創建一張新表隨便添點數據(模擬備份后新增數據)
從備份目錄中xtrabackup_info文件獲取到binlog和pos位置
cat /var/lib/mysql/xtrabackup_info
進入數據庫同步主庫 填入xtrabackup_info的binlog文件名和pos值
stop slave;
change master to master_host='192.168.0.135',master_user='sync',master_password='Sync!0000',master_log_file='log.000003',master_log_pos=1872;
啟動同步前需要在主庫上允許這個新從庫IP訪問
grant FILe on *.* to 'sync'@'192.168.0.141' identified by 'Sync!0000';
grant replication slave on *.* to 'sync'@'192.168.0.141' identified by 'Sync!0000';
flush privileges;
再到從庫開啟同步
start slave;
查看是否成功
show slave status\G;

成功后新增從庫已經把備份后產生的表都同步過來了
但是還沒完,至此從庫的賬號權限和主庫是一樣的(雖然從庫同步排除了mysql庫,但是xtra是物理備份了主庫所有文件),如果從庫要做成只讀就必須要新開個只讀賬號。參照上文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM