日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql主从增量同步_生产环境中mysql主从同步/完整/增量备份

發布時間:2025/3/12 数据库 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql主从增量同步_生产环境中mysql主从同步/完整/增量备份 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境:某項目的DB19數據庫服務器,無從庫也無開過binlog日志,負載有時比較高但基本運行穩定。備份情況:本地每天完整備份保留一周再rsync到異地備份機保留一月,由于數據量的增長加上每天晚上rsync到異地機時流量非常大,所以單獨建臺虛擬機作為DB19的備份。

備份措施:

1) DB19作為主庫開啟binlog日志。

2) DB19為從庫開設同步帳號并開放復制權限。

3) DB19寫腳本在凌晨一點鎖表進行一次完整備份,并記錄鎖表前的binlog文件和position位置點(show master status\G;可查看信息)

4)? 將備份的文件導入到從庫并設置主從同步.

5)? 從庫上腳本實施每月1號本地進行一次全備,每天00-20每3小時進行一次增量備份(備份binlog日志)

1.DB19 主庫設置并開啟binlog日志

my.cnf配置文件更改:

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

server-id=1       #id號在LAN中唯一

log-bin=log????????????? #開啟binlog日志

binlog-ignore-db=mysql?? #忽略權限庫的同步

max_connections=1000

long_query_time = 10

log-slow-queries = /var/log/mysql/mysql_slow.log  #開啟慢查詢日志

2. DB19為從庫開設同步帳號

mysql>grant replication slave on *.* to 'sqlsync'@'192.168.7.51' identified by '123456';

mysql> flush privileges;

mysql> show grants for sqlsync@"192.168.7.51";

3. DB19凌晨一點完整備份腳本并記錄鎖表前master status信息

#!/bin/bash

################################################

#this scripts is bakdb19

################################################

MYUSER=root

MYPASS="pwd19"

MYSOCK=/var/lib/mysql/mysql.sock

DATA_PATH=/backup/0314

LOG_FILE=${DATA_PATH}/mysqllogs_0314.log

DATA_FILE=${DATA_PATH}/mysql_backup_0314.sql.gz

MYSQL_PATH=/usr/bin

MYSQL_CMD="$MYSQL_PATH/mysql -u$MYUSER -p$MYPASS -S $MYSOCK"

MYSQL_DUMP="$MYSQL_PATH/mysqldump -u$MYUSER -p$MYPASS -S $MYSOCK -A? -B --flush-logs --single-transaction"

$MYSQL_CMD -e "flush tables with read lock;"

echo "-----show master status result-----" >>$LOG_FILE

$MYSQL_CMD -e "show master status;" >>$LOG_FILE

${MYSQL_DUMP} | gzip > $DATA_FILE

$MYSQL_CMD -e "unlock tables;"

腳本加入到crontab中:

0?? 01? *? *? *? sh /root/dbbak0314.sh>>/root/tasks/backup.log 2>&1

4. 將備份文件和記錄master信息的文件.log復制到從庫服務器

備份文件mysql_backup_0314.sql.gz

master信息的文件mysqllogs_0314.log

1)從庫安裝:

#yum install mysql mysq-server

#my.cnf配置文件:

[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

log-bin=log

#mysql_install_db

#/etc/init.d/mysqld start

2)數據導入

#gzip -d mysql_backup_0314.sql.gz

#mysql -S /data/mysql/mysql.sock

#more mysqllogs_0314.log

-----show master status result-----

File??? Position??????? Binlog_Do_DB??? Binlog_Ignore_DB

log.000003????? 61139130??????????????? mysql

3)配置同步

# vi /root/.my.cnf?? 創建密碼文件,省得mysql進去每次輸入密碼

[client]

password=pwd19

mysql> CHANGE MASTER TO

->?? MASTER_HOST='192.168.7.19',

->?? MASTER_USER='sqlsync',

->?? MASTER_PASSWORD='123456',

->?? MASTER_PORT=3306,

->?? MASTER_LOG_FILE='log.000003',??? #指向鎖表前記錄的binlog文件和位置點,可查看mysqllogs_0314.log

->?? MASTER_LOG_POS=61139130,

->?? MASTER_CONNECT_RETRY=60;

Query OK, 0 rows affected (0.08 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Queueing master event to the relay log

Master_Host: 192.168.7.19

Master_User: sqlsync

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: log.000028

Read_Master_Log_Pos: 4

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 229

Relay_Master_Log_File: log.000003

Slave_IO_Running: Yes

Slave_SQL_Running: No

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 1062

Last_Error: Error 'Duplicate entry '197963' for key 1' on query. Default database: 'agrocms'. Query: 'INSERT INTO rocms.web_swgkbdxx (web_id,town_code,name,area,bdxx,swgk,bdxxsum,swgksum,day) values ('116597','330522105212','xx村','xx/xx/xx縣/xx鎮/xx村',0,0,0,17,'2013-03-14')'

Skip_Counter: 0

Exec_Master_Log_Pos: 61139130

Relay_Log_Space: 5383075

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: NULL

1 row in set (0.25 sec)

ERROR:

No query specified

mysql> INSERT INTO rocms.web_swgkbdxx (web_id,town_code,name,area,bdxx,swgk,bdxxsum,swgksum,day) values ('116597','330522105212','xx村','xx/xx/xx縣/xx鎮/xx村',0,0,0,17,'2013-03-14');

ERROR 1062 (23000): Duplicate entry '116597-2013-03-14' for key 2 提示錯誤重復插入

解決方法:

mysql>set global sql_slave_skip_counter=1;不行,因為后面很多重復的insert語句執行不了同樣的提示錯誤

只好將slave-skip-errors=1062加入到my.cnf中 跳過錯誤代碼為1062(重復更新)的所有語句.

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.7.19

Master_User: sqlsync

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: log.000029

Read_Master_Log_Pos: 189077906

Relay_Log_File: mysqld-relay-bin.000058

Relay_Log_Pos: 34636888

Relay_Master_Log_File: log.000029

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 189077906

Relay_Log_Space: 34636888

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

1 row in set (0.00 sec)

ERROR:

No query specified

已同步OK,可用checksum來檢驗主從同步數據的一致性,線上機器需鎖表,暫不檢驗了

補充:

Slave_IO_Running: No 極有可能是網絡問題或主庫設了防火墻阻擋了,或設置的MASTER_LOG_POS位置信息不對.

測試OK,最好再將change master to信息在my.cnf配置文件中指定下:

# more /etc/my.cnf

[mysqld]

datadir=/data/mysql

socket=/data/mysql/mysql.sock

user=mysql

log-bin=log

expire-logs-days=3

log-slave-updates

server-id=2

master-host=192.168.7.19

master-user=sqlsync

master-password=wer852

master-port=3306

master-connect-retry=60

relay-log=mysqld-relay-bin

5. 從庫完整+增量備份腳本(暫略)

6. 恢復

1)目錄級的備份,恢復時可直接進行目錄的恢復frm,MYD,MYI文件

2)mysqldump全備加--tab參數時會生成sql和txt兩個文件,sql記錄所有包括create table的相關表結構更新語句,txt是數據文件。恢復時mysql先執行sql語句,再mysqlimport執行txt文件,如果表結構無更改,恢復時可直接mysqlimport導入txt文件.

3)mysqdump全備+增量備份,先最近一次的全備恢復,如果有多個binlog可按時間順序逐個導入.

總結

以上是生活随笔為你收集整理的mysql主从增量同步_生产环境中mysql主从同步/完整/增量备份的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。