mysql主從配置及遇到的問題


  今天研究了個開源項目,數據庫是mysql的,其中的腳本數據需要備份,由於本人的機器時mac pro,而且mac下的數據庫連接工具都不怎么好用,就想着如何利用windows下的數據庫連接工具使用,並做相關備份,另外windows系統下的sqlyog工具還是非常強大的,在此推薦。
  因此為了使用sqlyog等windows系統下的連接工具,便開始了一天的折騰。
  首先兩種思路,其一是利用另外一台宏碁筆記本電腦,直接在其上安裝sqlyog使用,通過無線局域網進行連接使用,這種方式太過麻煩,而且來回換電腦很麻煩,遠程連接使用也很慢。其二是安裝虛擬機,在虛擬機上安裝連接工具。
  由於本人的mac pro已經安裝mysql數據庫,並且已經安裝了virtualbox虛擬機並安裝了windows7系統,並在windows7系統中也安裝了mysql。
  1.在虛擬機win7系統中安裝sqlyog,直接連接mac系統的mysql,並導出備份,這個很簡單。(當然要注意虛擬機與mac機器的網絡連接是通的)
    1)首先要設置虛擬機網卡設置,選擇橋接模式,virtualbox這類虛擬機的橋接模式的概念是虛擬機作為網絡中的一台單獨的機器,有自己的ip,與局域網中的ip是想通的,具體概念參考百度http://jingyan.baidu.com/article/3f16e003cd0a0d2591c103b4.html
      設置virtualbox的橋接模式如圖所示
      !

      

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

這樣按照圖中的設置,虛擬機根主機就可以相互訪問了。
  2)利用sqlyog進行連接

   
對了 還有一點需要注意的是,由於局域網ip可能不會固定,正好本人用的是小米路由器,有綁定設備ip的功能,這樣ip就固定啦

 

從上面的圖中可以看出,主機ip跟虛擬機ip是獨立的啦。

2.mysql主從備份的方式,mac pro為主master,虛擬機為從slave
1)首先由於mac電腦mysql客戶端安裝完成后,默認是沒有my.cnf文件的,即使修改了/usr/local/mysql/的相關配置也是沒有用的,這就需要自定義mysql配置了,將/usr/local/mysql/support-files/中的my-default.cnf 文件 拷貝到/etc目錄下,當然這里也遇見問題了,服務啟動不了了

這就需要在配置文件中加入explicit_defaults_for_timestamp=true

2)修改配置文件,如下所示

[mysqld]
explicit_defaults_for_timestamp=true

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
log_bin=mysql-bin


# These are commonly set, remove the # and set as required.
port =3307

#mysql_firewall_mode = off

server-id = 1 #主機標示,整數
#log_bin = /Users/lixiaojiao/log/mysql/mysql-bin.log #確保此文件可寫
read-only =0 #主機,讀寫都可以
binlog-do-db =xxx #需要備份數據,多個寫多行
binlog-ignore-db =mysql #不需要備份的數據庫,多個寫多行
binlog_checksum = none

# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

3)修改虛擬機中的mysql目錄中的my.cnf

修改mysqld節點

[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306

server-id = 2
log_bin = C:\log\mysql\mysql-bin.log
master-host =192.168.31.209
master-user =root
master-pass =123456
master-port =3307
master-connect-retry=5 #如果從服務器發現主服務器斷掉,重新連接的時間差(秒)
replicate-do-db = xxx #只復制某個庫
log-slave-updates
slave-skip-errors
#replicate-ignore-db=mysql #不復制某個庫

4)重啟master及slave並查看狀態
查看master狀態

查看slave狀態

當看到上面兩張圖片的時候則證明配置成功,當然本人並沒有那么順利,中途遇到了很多問題
其一:Got fatal error 1236 from master when reading data from binary log
這中問題按照網上大部分的解決方法是,首先查看master的狀態,並記錄下相關信息
比如信息為:


要記錄下file:mysql-bin.000002 position:16093
並在slave中執行:

stop slave;
change master to master_log_file='mysql-bin.000002',master_log_pos= 16093;
start slave;

這種方式應該是沒有問題的。如果上面這種方式不行,可以試試下面這種,本人試了試應該是沒問題,

reset master;
reset slave;

(這種方式本人可以可能是因為本人配置的時候沒有按照規范來,導致主從不一致的原因)
其二:Slave can not handle replication events with the checksum that master is configured to log
  這個錯誤一般出現在master5.6,slave在低版本的情況下。這是由於5.6使用了crc32做binlog的checksum。除了把master的設置從crc32改到none
  binlog-checksum = none [my.cnf]
其三:本人今天花費了大量的時間主要原因便是這點了,本人在虛擬機里查看slave狀態顯示都正確,

Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Master_SSL_Key:
Seconds_Behind_Master: 0(也已經不是null)

但是本人通過虛擬機的連接工具,將master數據庫中添加了一張表並插入數據,但是總是沒有同步到從mysql,於是查看進程
從mysql進程

master進程

這點問題也就是糾結了一天的問題,當然也沒有找出具體原因,看提示原因貌似是什么進程已經睡眠的原因,但是為啥睡眠沒搞明白,查看slave hosts也沒有查到

 

 

當然最后,沒辦法了,糾結了很久也沒有發現什么原因的情況下,本人直接在mac機器上直接通過終端插入數據,居然成功了。。。無語。。不過最終能夠同步了至少還有點欣慰。至於什么出現這個問題要找時間好好查找原因了。


免責聲明!

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



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