mysql主从位点保存时间_MySQL主从备份
本文目錄結構:
1.主從復制
1.1簡介
1.2實操
1.3問題處理
其他:my.cnf主從配置參數
1.主從復制
1.1簡介
原理
主服務器數據庫的每次操作都會記錄在二進制日志文件mysql-bin.xxx中。從服務器的I/O線程使用專用帳號登陸到主服務器中讀取該二進制文件,并將文件內容寫入到自己本地的中繼日志relay-log文件中。然后從服務器的SQL線程會根據中繼日志中的內容執行SQL語句,這要求兩臺服務器有同樣的初態。
邏輯步驟:
1)主服務器數據庫的每次操作都會記錄在二進制日志文件mysql-bin.xxx中.
2)從庫的IO線程向主庫的主進程發送請求,主庫驗證從庫,交給主庫IO線程負責數據傳輸
3)主庫IO線程對比從庫發送過來的master.info里的信息,將binlog文件信息,偏移量和binlog文件名等發送給從庫
4)從庫接收到信息后,將binlog信息保存到relay-bin中,同時更新master.info的偏移量和binlog文件名
5)從庫的SQL線程不斷的讀取relay-bin的信息,同時將讀到的偏移量和文件名寫道relay-log.info文件,binlog信息寫進自己的數據庫,一次同步操作完成。
6)完成上次同步后,從庫IO線程不斷的向主庫IO線程要binlog信息
形式:
一主一從,一主多從,多主一從,主主復制,聯級復制。
用途:
實時災備,讀寫分類,備份。
條件:
主庫開啟binlog日志
主從server-id不同
從庫可以連到主庫
1.2.實操配置
1)同步初態
先將主機數據庫加鎖,避免數據改變
>use tatabase_name;
>flush tables with read lock;
再將主機數據備份
mysqldump -uroot -pxxx database_name > database_name.sql
備份完后解鎖數據庫
>unlock tables;
在從機從機相同的數據庫,然后導入數據
>create table database_name;
>use database_name;
>source database_name.sql;
2)主機打開二進制日志
在/etc/my.cnf主要配置如下內容:
log-bin=my-bin#開啟二進制日志
server-id=1#設置為主庫,server-id值為1
修改后重啟mysql服務
3)查看主機日志記錄狀態
>show master status\G
顯示內容格式如下,記住此狀態,后面用到
***************** 1. row ****************
File: my-bin.000001 #當前記錄的日志
Position: 553 #日志中記錄的位置
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
4)主機登錄mysql創建允許從服務器同步數據的賬號
> grant replication slave on *.* to 'user_name'@'slave_ip' identified by 'pass_word';
5)配置從機mysql,在從機/my.cnf配置如下內容:
log-bin=my-bin #開啟二進制日志
server-id= 2 #主數據庫id為1,不能相同。
replicate_wild_do_table=copytest.% #只同步copytest庫下的表,可以不配置此項
relay_log=mysqld-relay-bin #記錄中繼日志
log-slave-updates=YES #從服務器同步后記錄日志
也可以添加以下兩行指定開啟日志的庫:
binlog_do_db=db_name1;db_name2 --指定同步的數據庫
binlog_ignore_db=db_name3;db_name4--指定不同步的數據庫
注意:如果配置binlog_do_db其他庫都將被忽略
修改完后重啟mysql
6)根據前面在主機配置的賬號,在從機登錄mysql后打開同步功能
> change master to master_host='master_ip',master_user='user_name',master_password='pass_word',master_log_file='my-bin.000001',master_log_pos=553;
配置完后從起msyql的slave服務
> slave start;
7)查看從服務器是否成功開啟同步
>show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.225
Master_User: user_name
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: my-bin.000001
Read_Master_Log_Pos: 1114
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 1260
Relay_Master_Log_File: my-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table: test.%
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1114
Relay_Log_Space: 1563
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
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
其中:Slave_IO_Running和Slave_SQL_Running的狀態都是YES,說明同步開啟成功。
現在就可以去主服務器上的test庫下創建表開測試同步了
1.3問題處理
1)主服務器:show master status\G 輸出Empty set
參考博文:https://blog.csdn.net/lanyang123456/article/details/85221071
原因:MySQL沒有開啟日志,可以登錄MySQL如下查看
mysql> show variables like '%log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+-------+
6 rows in set (0.00 sec)
可以看到log_bin為關閉狀態,在mysql 配置文件 /etc/my.cnf中
[mysqld]下添加:
log-bin=my-bin
然后重啟MySQL,再次查看master狀態:
mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: my-bin.000001
Position: 245
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
log-bin配置項表示binlog的base name,產生的日志文件名類似:my-bin.00001,my-bin.00002...
show master status命令列出了日志位點信息,包括binlog file,binlog position等。
2)從服務器:show slave status\G 發現Slave_IO_Runing:No
參考博文:https://blog.csdn.net/xu1314/article/details/7693906
參考博文:https://www.cnblogs.com/l-hh/p/9922548.html
注意查看從機 Last_IO_Error,下面原因可能不準,但這兒是保存信息,可以根據這定位
可能原因:
a)slave沒有訪問master的權限,應檢查master的權限配置和slaver的登錄master賬號配置,以及通信。
b)slave的master日志文件配置與主服務器不一致
使用show slave status\G 查看從機狀態,使用show master status\G 查看主機狀態,此時slave的Last_IO_Error提示:
Coud not find find first log file name in binary log index file --文件名不對
Misconfigured master -server id was not set --主機的server-id沒有配置,要配置且為1,然后從起主機的MySQL和從機的slave
Client requested master to start replication from impossible position;the... --從機讀取主機日志位置超過主機日志最大位置
本人原因:文件不對和主機server-id未配置,處理如下
主機配置my.cnf中的server-id,值為1
主機從起msyql
停止從機slave:slave stop
從機修改配置:CHANGE MASTER TO MASTER_LOG_FILE='主機的File', MASTER_LOG_POS=0或比主機的Position小的正數;
從機啟動slave:slave start
其他1:my.cnf主從配置主要參數
設置主數據庫的參數信息,主要設置字段為server-id,log_bin,binlog_do_db ,其他字段參考參數定義自行設置, 配置文件中相關參數定義如下:
總結
以上是生活随笔為你收集整理的mysql主从位点保存时间_MySQL主从备份的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全民乐分期多久到账
- 下一篇: mysql主从同步默认延迟_减少mysq