mysql主從同步配置(mysql5.7):
1.将目前資料庫檔案存儲目錄備份
cd /app/
tar -czvf /app/packages/binlog_tar.gz.20210303 /app/database/mysql/database/mysql/data/3306/binlog*
tar -czvf /app/packages/database_bak_tar.gz.20210303 database
2.登陸資料庫初始化binlog日志
mysql> reset master;
mysql> show master status\g;
3.導出mysql全量的表資料:
導出資料并記錄master_pos節點
./mysqldump -uroot -p --all-databases --master-data > /home/all_bak
回車後輸入密碼
将導出的全量表資料檔案傳送至從資料庫機器
scp /home/all_bak
-------若導出失敗則根據實際情況調整逾時時間-------
mysql> show global variables like '%timeout%';
mysql> set global net_read_timeout = 120;
mysql> set global net_write_timeout = 900;
mysql> set global wait_timeout=2880000;
mysql> set global interactive_timeout=2880000;
mysql> max_allowed_packet = 500M
4.配置檔案添加
vi /etc/my.cnf
server-id=1
log-bin=/app/database/mysql/data/3306/binlog
5.建立主從同步使用者
建立同步使用者slave
create user 'slave'@'IP' identified by 'PWD';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'IP';
flush privileges;
撤銷授權
REVOKE all PRIVILEGES on *.* from 'root'@'%' ;
檢查配置
select user,host from mysql.user where user='slave';
重新開機資料庫
kill -9 資料庫程序PID
/bin/sh /usr/local/mysql/bin/mysqld_safe &
6.從資料庫機器配置:
建立mysql使用者
useradd mysql
passwd mysql
解壓mysql5.7gz包
本次使用的是mysql5.7.26
tar -xzvf mysql-5.7.26-el7-x86_64.tar.gz
mv mysql-5.7.26-el7-x86_64.tar.gz /app/mysql
賦權目錄給mysql使用者
chown -R mysql.mysql /app/mysql
cp -rp /app/mysql /usr/local/mysql/
ln -s /usr/local/mysql/bin/mysql /bin/mysql
配置檔案添加:
與主資料庫配置檔案一緻,隻修改server-id
server-id=11
初始化資料庫
cd /usr/local/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/app/database/mysql/data/3306/ -- user=mysql --initialize
記錄好mysql初始化後的root使用者密碼
啟動資料庫
cd /usr/local/mysql/bin/
./mysqld_safe --defaults-file=/etc/my.cnf &
登陸mysql重置root密碼
重置root使用者密碼
mysql> alter user 'root'@'localhost' identified by '123456';
重新整理MySQL的系統權限相關表
mysql> flush privileges;
導入主資料全量表資料檔案
mysql -uroot -p < /home/wangtc/all_bak; 回車後輸入密碼
找到主資料全量表資料檔案binlog節點資訊并記錄
head -30 /home/wangtc/all_bak|grep mysql-bin
配置主從同步(從資料庫)
mysql> change master to
-> master_host='主資料庫IP',
-> master_port=3306,
-> master_user='slave',
-> master_password='PWD',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=294;
啟動slave
mysql> start slave;
檢視slave狀态
mysql> show slave status\G;
7. 常見報錯及解決方法
若Slave_IO_Running不顯示為yes則存在以下幾種情況:
本機或主資料庫機器防火牆及selinux未關閉
無法使用主從同步使用者連接配接主資料庫:檢查主資料庫授權資訊,檢查從庫主從配置是否有誤
若Slave_IO_Running不顯示為yes則:
如果資料庫沒有使用主從複制,那麼就可以将參數log_bin_trust_function_creators設定為1
SET GLOBAL log_bin_trust_function_creators = 1;
跳過slave上的1個錯誤,------若報錯的條數很多,可調整參數
set global sql_slave_skip_counter =1;
若報錯:Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
停止slave
mysql> stop slave;
重置slave
mysql> reset slave;
啟動slave
mysql> start slave;
---------以上均屬個人經驗,有不對的地方還請提出,一起溝通交流,謝謝----------