2020年10月13日 星期二

mysql 備庫 同步停止 , Waiting for table metadata lock

 

主庫執行 truncate table 指令

這時備庫卻停止同步

show slave status\G;

出現

Seconds_Behind_Master: 1080

Slave_SQL_Running_State: Waiting for table metadata lock


表示備庫這邊有卡住  , 備庫的 show slave status 的 Seconds_Behind_Master 越來越多

查詢

select * from information_schema.innodb_trx

看到備庫是否還有未完成的session , kill session 就可以了


恢復完成,  變成

Seconds_Behind_Master: 0

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates


redhat 6 yum 無法安裝 解決方法

 


redhat 6 無法使用 yum 


出現錯誤

Loaded plugins: product-id, refresh-packagekit, search-disabled-repos, security, subscription-manager

This system is not registered with an entitlement server. You can use subscription-manager to register.




redhat 跟 centos 是一樣的

解決方法是替換成 centos 的來源


下載來源檔

cd /etc/yum.repos.d/

wget  http://mirrors.163.com/.help/CentOS6-Base-163.repo

vi CentOS6-Base-163.repo


把文件里面的$releasever全部替换為版本號:6

:%s/$releasever/6/g


清除暫存,且資料更新
yum clean all
yum makecache
yum update


就可以使用囉



出現 Resolving mirrors.163.com... failed: Temporary failure in name resolution.

vim /etc/resolv.conf
nameserver 8.8.8.8















2020年9月23日 星期三

mysql 8 主備配置




1.mysql 主備配置設定


主庫配置 同步帳號

CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'Ron_master_1';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
flush privileges;


2.主庫配置 /etc/my.cnf

[mysqld]
log-bin=/mysql/data/binlogs/mysql-bin
server-id=1


3.備庫配置  /etc/my.cnf

[mysqld]
log-bin=/mysql/data/binlogs/mysql-bin
relay_log=/mysql/data/binlogs/mysql-relay-bin
server-id=2
log_slave_updates=1
read_only=1


開啟read_only
一般來說 備庫是不用配置  log-bin , 除非該slave 是 其他slave 的master 



4. 查看主庫 log 狀態

 show master status;






5.登入備庫設定 主庫的 bin 及 position 參數


CHANGE MASTER TO 
MASTER_HOST='10.10.17.27',
MASTER_USER='repl',
MASTER_PASSWORD='Ron_master_1',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=794;




確認 data 下的 auto.cnf 的 uuid 跟主庫不同
修改server-uuid

查詢show variables like '%server_uuid%';


啟動 slave 同步

start slave;


備庫查看狀態........

show slave status\G;

這邊可以看到相關的主庫資訊



Slave_io_running , slave_sql_running  都是 YES
Last_IO_Errno  ,  Last_SQL_Errno 也都是 0

表示同步啟動沒問題,,,


--------------測試數據同步




-------------- 停止 slave 同步
stop slave ;


--------------備庫指定從主庫某一個  Position 開始同步


備庫先停掉同步
stop slave ;


主備兩邊的資料目前都是一致的



接下來主庫一直做資料異動




查看 主庫   bin 及 position 參數
 show master status;






備庫開始從這一點開始進行同步

CHANGE MASTER TO 
MASTER_HOST='10.10.17.27',
MASTER_USER='repl',
MASTER_PASSWORD='Ron_master_1',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=2236;

start slave ;





主庫這時候新增一筆  id = 4



備庫 這邊只會查詢到 id = 1,2 及剛剛新增的 id = 4






不過此時要注意, 主庫刪除 id= 3 時, 因備庫沒有 id = 3
這時同步會停止且出現   Last_Errno: 1032 錯誤 
同步停在   master log mysql-bin.000001, end_log_pos 2815  





--------------解決方法1
因為我們知道 備庫是少 id = 3  , 這時候備庫手動新增 id = 3 上去


在執行 

start slave ;  同步就可以再次執行 id = 3 也被刪除了




--------------解決方法2
備庫執行show slave status\G;

裡頭的錯誤訊息

Last_SQL_Error: Could not execute Delete_rows event on table DBA.dba_test; Can't find record in 'dba_test', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000001, end_log_pos 2815


錯誤很明顯的跟你說 是這邊表  table DBA.dba_test  有問題且停在  master log mysql-bin.000001, end_log_pos 2815 位置


直接從主庫找 bin log 的紀錄 看看執行哪一條SQL 出現錯誤


  mysqlbinlog --no-defaults --base64-output=decode-rows -v -v /mysql/data/mysql-bin.000001 | grep -A 200 '2815' > error_sql.txt
   




執行delete 出現錯誤, 把資料補回去備庫後, 就可以在執行同步了