Mysql主從同步

說明:

操作系統:CentOS 6.5 64位    

MySQL數據庫版本:mysql-5.6.14

MySQL主服務器:192.168.138.75

MySQL從服務器:192.168.138.33

準備篇:

說明:在兩臺MySQL服務器192.168.138.75和1192.168.138.33上分別進行如下操作

備註:

作爲主從服務器的MySQL版本建議使用同一版本!

或者必須保證主服務器的MySQL版本要高於從服務器的MySQL版本!

一、配置好IP、DNS 、網關,確保使用遠程連接工具能夠連接服務器

二、配置防火牆,開啓3306端口     我這邊是關閉防火牆了~

vi /etc/sysconfig/iptables  #編輯

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT  #允許3306端口

特別提示:如果這兩條規則添加到防火牆配置的最後一行,導致防火牆啓動失敗,正確的應該是添加到默認的22端口這條規則的下面,添加好之後防火牆規則如下所示:

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

# Firewall configuration written by system-config-securitylevel

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT

-A FORWARD -j RH-Firewall-1-INPUT

-A RH-Firewall-1-INPUT -i lo -j ACCEPT

-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT

-A RH-Firewall-1-INPUT -p 50 -j ACCEPT

-A RH-Firewall-1-INPUT -p 51 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT

-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT

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

/etc/init.d/iptables restart #最後重啓防火牆使配置生效

三、關閉SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #註釋掉

#SELINUXTYPE=targeted #註釋掉

SELINUX=disabled #增加

:wq  #保存退出

setenforce 0 #立即生效

 

1. 查看是否安裝舊版本

使用下面的命令檢查是否安裝有MySQL Server

#rpm -qa | grep mysql


2. 卸載MySQL Server舊版本

#rpm -e mysql            //普通刪除模式

#rpm -e --nodeps mysql    // 強力刪除模式,如果使用上面命令刪除時,提示有依賴的其它文件,則用該命令可以對其進行強力刪除

3. 安裝庫文件

安裝編譯代碼需要的包

#yum -y install make cmake  gcc-c++ bison ncurses-devel mysql

 

5. 下載編譯安裝Mysql 5.6版本

wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.14.tar.gz

tar xvf mysql-5.6.14.tar.gz

cd mysql-5.6.14

cmake \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DSYSCONFDIR=/etc \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \

-DMYSQL_TCP_PORT=3306 \

-DENABLED_LOCAL_INFILE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DEXTRA_CHARSETS=all \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

 

 

make && make install 

6. 配置MySQL

groupadd mysql

useradd -g mysql  -s /sbin/nologin mysql

修改權限

chown -R mysql.mysql /usr/local/mysql

7. 初始化mysql數據庫

進入安裝路徑,執行初始化配置腳本,創建系統自帶的數據庫和表

# cd /usr/local/mysql

scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql

 

8. 修改my.cnf配置文件

#vi /etc/my.cnf

[mysqld]

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

basedir=/usr/local/mysql                            //安裝時定義的安裝目錄

datadir=/usr/local/mysql/data                         //安裝時定義的數據存放目錄

port=3306                                         //安裝時定義的監聽端口

#server_id = .....

socket=/var/lib/mysql/mysql.sock                             //注意此目錄權限問題

 

chmod a+rwx /var/lib/mysql/mysql.sock  這個先不用執行、看看mysql是否可以成功啓動

9. 添加mysql自啓動

添加服務,拷貝服務腳本到init.d目錄,並設置開機啓動

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig mysqld on

service mysqld start    

10. 配置環境變量

MySQL啓動成功後,root默認沒有密碼,我們需要設置root密碼。

設置之前,我們需要先設置PATH使之直接調用mysql

修改/etc/profile文件,在文件末尾添加

#vi /etc/profile

PATH=/usr/local/mysql/bin:$PATH

export PATH

關閉文件,運行下面的命令,讓配置立即生效

#source /etc/profile

現在,我們可以在終端內直接輸入mysql進入,mysql的環境了

執行下面的命令修改root密碼

#mysql -uroot  

mysql> SET PASSWORD = password('123456');

mysql>flush privileges;  #刷新系統授權表

sql_mode=NO_ENGINE_SUBSTITUTION

到此,mysql安裝完成!

 

配置篇

一、配置MySQL主服務器(192.168.137.75)

mysql -u root -p  #進入MySQL控制檯

create database osyunweidb;   #建立數據庫osyunweidb

create user osyunweiuser;

update user set authentication_string=PASSWORD('123456') where User='osyunweiuser';     #創建用戶osyunweiuser,密碼123456

grant all on osyunweidb.* to 'osyunweiuser'@'192.168.21.130' identified by '123456' with grant option;  #授權用戶osyunweiuser從192.168.21.130完全訪問數據庫,注意:這裏的192.168.21.130是要連接數據庫Web服務器IP    這個沒有執行

 

create user osyunweidbbak;

update user set authentication_string=PASSWORD('123456') where User='osyunweidbbak';     #建立MySQL主從數據庫同步用戶osyunweidbbak密碼123456

flush privileges;   #刷新系統授權表

grant replication slave  on *.* to 'osyunweidbbak'@'192.168.137.33' identified by '123456' with grant option;  #授權用戶osyunweidbbak只能從192.168.137.33這個IP訪問主服務器192.168.137.75上面的數據庫,並且只具有數據庫備份的權限

 

flush privileges;   #刷新系統授權表

 

二、把MySQL主服務器192.168.137.75中的數據庫osyunweidb導入到MySQL從服務器192.168.137.33

1、導出主數據庫osyunweidb

備註:在導出之前可以先進入MySQL控制檯執行下面命令

flush tables with read lock;    #數據庫只讀鎖定命令,防止導出數據庫的時候有數據寫入

unlock tables;   #解除鎖定  導出之後在mysql控制檯執行

 

mysqldump -u root -p --default-character-set=utf8 --opt -Q -R --skip-lock-tables osyunweidb > /home/osyunweidbbak.sql    #在MySQL主服務器進行操作,導出數據庫osyunweidb到/home/osyunweidbbak.sql

 

scp /home/osyunweidbbak.sql [email protected]:/home   #把home目錄下的osyunweidbbak.sql 數據庫文件上傳到MySQL從服務器的home目錄下面

 

 

2、導入數據庫到MySQL從服務器

mysql  -u root -p  #進入服務器MySQL控制檯

create database osyunweidb;   #創建數據庫

use osyunweidb    #進入數據庫

source  /home/osyunweidbbak.sql  #導入備份文件到數據庫

mysql -u osyunweidbbak -h 192.168.137.75 -p  #測試在從服務器上登錄到主服務器

 

 

三、配置MySQL服務器(192.168.137.75)的my.cnf文件

vi /etc/my.cnf   #編輯配置文件,在[mysqld]部分添加下面內容

server-id=1   #設置服務器id,爲1表示主服務器,注意:如果原來的配置文件中已經有這一行,就不用再添加了。

log-bin=mysql-bin  #啓動MySQ二進制日誌系統,注意:如果原來的配置文件中已經有這一行,就不用再添加了。

binlog-do-db=osyunweidb  #需要同步的數據庫名,如果有多個數據庫,可重複此參數,每個數據庫一行

binlog-ignore-db=mysql   #不同步mysql系統數據庫

:wq!   #保存退出

wKioL1drb9fBW60uAACfN4n34Lw664.png-wh_50

service mysqld  restart  #重啓MySQL

 

mysql -u root -p   #進入mysql控制檯

 

show variables like 'server_id';  #查看server-id的值是否爲1

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 1     |

+---------------+-------+

1 row in set (0.00 sec)

 

show master status;  #查看主服務器,出現以下類似信息

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |      120 | osyunweidb   | mysql            |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

 

注意:這裏記住File的值:mysql-bin.000001和Position的值: 120,後面會用到。

 

 

四、配置MySQL從服務器(192.168.137.33)的my.cnf文件

vi /etc/my.cnf   #編輯配置文件,在[mysqld]部分添加下面內容

server-id=2   #設置服務器id,修改其值爲2,表示爲從數據庫

log-bin=mysql-bin  #啓動MySQ二進制日誌系統,注意:如果原來的配置文件中已經有這一行,就不用再添加了。

replicate-do-db=osyunweidb   #需要同步的數據庫名,如果有多個數據庫,可重複此參數,每個數據庫一行

replicate-ignore-db=mysql   #不同步mysql系統數據庫

read_only  #設置數據庫只讀

:wq!    #保存退出

 

service mysqld restart   #重啓MySQL

 

mysql  -u root -p  #進入MySQL控制檯

show variables like 'server_id';  #查看server-id的值,必須爲上面設置的2,否則請返回修改配置文件

mysql> show variables like 'server_id';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id     | 2     |

+---------------+-------+

1 row in set (0.01 sec)

 

stop slave;   #停止slave同步進程

 

change master to master_host='192.168.137.75',master_user='osyunweidbbak',master_password='123456',master_log_file='mysql-bin.000001' ,master_log_pos=120;    #執行同步語句

 

 start slave;    #開啓slave同步進程

 

SHOW SLAVE STATUS\G   #查看slave同步信息,出現以下內容

mysql>  SHOW SLAVE STATUS\G

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

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.137.75

                  Master_User: osyunweidbbak

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000001

          Read_Master_Log_Pos: 120

               Relay_Log_File: localhost-relay-bin.000002

                Relay_Log_Pos: 283

        Relay_Master_Log_File: mysql-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB: osyunweidb

          Replicate_Ignore_DB: mysql

           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: 120

              Relay_Log_Space: 460

              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

                  Master_UUID: 0496b8b2-31c8-11e6-9779-000c295bfcc7

             Master_Info_File: /usr/local/mysql/data/master.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

           Master_Retry_Count: 86400

                  Master_Bind: 

      Last_IO_Error_Timestamp: 

     Last_SQL_Error_Timestamp: 

               Master_SSL_Crl: 

           Master_SSL_Crlpath: 

           Retrieved_Gtid_Set: 

            Executed_Gtid_Set: 

                Auto_Position: 0

1 row in set (0.00 sec)

 

注意查看:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

以上這兩個參數的值爲Yes,即說明配置成功!

 

 

測試篇

測試MySQL主從服務器是否正常運行

1、進入MySQL主服務器(192.168.137.75)

mysql -u root -p  #進入MySQL控制檯

use osyunweidb   #進入數據庫

CREATE TABLE test ( id int not null primary key,name char(20) );   #創建test表

2、進入MySQL從服務器

mysql -u root -p  #進入MySQL控制檯

use osyunweidb   #進入數據庫

show  tables;  #查看osyunweidb表結構,會看到有一個新建的表test,表示數據庫同步成功

mysql> show  tables;

+----------------------+

| Tables_in_osyunweidb |

+----------------------+

| test                 |

+----------------------+

1 row in set (0.00 sec)

至此,Linux下MySQL數據庫主從同步配置完成!

 

查看日誌

[root@localhost data]# pwd

/usr/local/mysql/data

[root@localhost data]# ll

總用量 110624

-rw-rw----. 1 mysql mysql       56 6月  14 08:36 auto.cnf

-rw-rw----. 1 mysql mysql 12582912 6月  14 17:44 ibdata1

-rw-rw----. 1 mysql mysql 50331648 6月  14 17:44 ib_logfile0

-rw-rw----. 1 mysql mysql 50331648 6月  14 08:34 ib_logfile1

drwx------. 2 mysql mysql     4096 6月  14 08:34 mysql

-rw-rw----. 1 mysql mysql      269 6月  14 17:44 mysql-bin.000001

-rw-rw----. 1 mysql mysql       19 6月  14 17:35 mysql-bin.index

drwx------. 2 mysql mysql     4096 6月  14 17:44 osyunweidb

drwx------. 2 mysql mysql     4096 6月  14 08:34 performance_schema

drwxr-xr-x. 2 mysql mysql     4096 6月  14 08:24 test

-rw-rw----. 1 mysql mysql        6 6月  14 17:35 zabbix.xmlgrg.com.mshome.net.pid

[root@localhost data]# mysqlbinlog mysql-bin.000001 

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;

/*!40019 SET @@session.max_insert_delayed_threads=0*/;

/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;

DELIMITER /*!*/;

# at 4

#160614 17:35:18 server id 1  end_log_pos 120 CRC32 0x9903b903     Start: binlog v 4, server v 5.6.14-log created 160614 17:35:18 at startup

# Warning: this binlog is either in use or was not closed properly.

ROLLBACK/*!*/;

BINLOG '

1s9fVw8BAAAAdAAAAHgAAAABAAQANS42LjE0LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAADWz19XEzgNAAgAEgAEBAQEEgAAXAAEGggAAAAICAgCAAAACgoKGRkAAQO5

A5k=

'/*!*/;

# at 120

#160614 17:44:06 server id 1  end_log_pos 269 CRC32 0xff8851aa     Query    thread_id=1    exec_time=0    error_code=0

use `osyunweidb`/*!*/;

SET TIMESTAMP=1465897446/*!*/;

SET @@session.pseudo_thread_id=1/*!*/;

SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;

SET @@session.sql_mode=1075838976/*!*/;

SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;

/*!\C utf8 *//*!*/;

SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;

SET @@session.lc_time_names=0/*!*/;

SET @@session.collation_database=DEFAULT/*!*/;

CREATE TABLE test ( id int not null primary key,name char(20) )       #這就是剛纔建庫語句

/*!*/;

DELIMITER ;

# End of log file

ROLLBACK /* added by mysqlbinlog */;

/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

#當主庫,不斷髮送日誌過來的時候,他就不斷的更新這個日誌

[root@localhost data]# cat mysql-bin.index 

./mysql-bin.000001

[root@localhost data]# 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章