天天看點

Mysql replication 配置 1        主機master設定 2        備機slave設定 3        測試

mysql 設定寫入 master 後, 自動 replication 到 slave 去, 運作基本原理是:

insert/update/delete 文法, 自動寫入 master 的 binlog file.

由 grant replication 授權的賬号, 自動将 sql 文法 repl 到 slave 的 db 執行.

因而完成 replication 的動作.

========================================================================

作業系統:linux

master端ip:192.168.2.122

slave端ip:192.168.2.123

注意:在做配置的過程中,最好不要向 master 資料庫做寫入操作。

1.       建立名為test1的資料庫

create database test1;

2.       建立表名為test1的表

create table `test1` ( `id` bigint(20) unsignednot null auto_increment,   `name`  varchar(100)

,   primary key(`id`)  );

3.       在表test1中插入3條測試資料

insert into `test1` values (1,'name1');

insert into `test1` values (2,'name2');

insert into `test1` values (3,'name3');

1.       增加一用于資料庫同步的使用者root

mysql>grant replicationslave,replication client,reload,super on *.* to'root'@'192.168.2.123' identified by 'password';

(授與從192.168.2.123主機上登入使用者root資料複制權限)

2.       使權限生效,這步可不做,因為過會要重新開機mysql

mysql>flush privileges;

3.       退出mysql指令行界面

mysql> exit

4.       停止mysql服務

service mysqld stop

5.       更改mysql配置檔案/etc/my.cnf

1)       打開mysql配置檔案

vi /etc/my.cnf

2)       在配置檔案中添加以下内容

   #bind-address           = 127.0.0.1

server-id               = 1    (注意不能與其他伺服器的配置一樣)

log_bin                 = /var/log/mysql/mysql-bin.log

# 若是 innodb, 且有用 transaction 的話, 需再加入下面兩行

innodb_flush_log_at_trx_commit=1

sync_binlog=1

#如果指定具體的資料庫,需加入下面一行

binlog-do-db= test1

3)      記錄 master status

mysql>show master status; #這邊資料都要記好,等一下設定slave要用 +----------------------+------------+------------------+----------------------+ | file                     | position   | binlog_do_db | binlog_ignore_db  | | mysql-bin.000014  |      232   |                      |                          |

6.       将要進行熱備的資料庫test1打包

tar czvf /var/lib/mysql/test1.tar.gztest1

7.       啟動mysql

service mysqld start

1.       更改mysql配置檔案/etc/my.cnf

3)       打開mysql的配置檔案

4)       在配置檔案中添加以下内容

master-host = 192.168.2.122

master-user = root

master-password = password

master-port = 3306

master-connect-retry = 10

master_log_file='mysql-bin.000014'

# 這邊就要用到之前 master 抄下來的值.

master_log_pos=232   # 這邊就要用到之前 master 抄下來的值.

replicate-do-db = test1  #當需要具體到某個資料庫的時候,才配置該行

2.       将先前(1.2中第6步)從master打包的資料庫檔案test1.ter.gz發送到備機slave的相應目錄下,本次在/var/lib/mysql目錄,解壓檔案并修改其可執行權限

cd /var/lib/mysql

tar zxvf

 test1.tar.gz

chmod 700 test1

chmod 660 test1

3.       重新啟動mysql服務

service mysqld

 restart

4.       啟動slave

mysql> start slave;

檢視slave狀态:

mysql> show slavestatus\g;

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

            slave_io_state:waiting for master to

send event

               master_host: 192.168.2.122

               master_user: root

               master_port: 3306

             connect_retry: 10

           master_log_file: mysql-bin.000002

       read_master_log_pos: 582

            relay_log_file: mysqld-relay-bin.000005

             relay_log_pos: 515

     relay_master_log_file: mysql-bin.000002

          slave_io_running: yes

         slave_sql_running: yes

           replicate_do_db: test1,test1

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

           relay_log_space: 515

           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)

******************************************************

可以看到

slave_io_running: yes

slave_sql_running: yes

如果都是yes,代表已經在同步

至此server伺服器上的mysql設定完畢

1.       主機和備機都正常運作情況,對主機進行增加一條記錄insert

into `test1` values(6,'name6');

檢測備機是否也增加了此條記錄,經檢查,資料相同

2.       主機和備機都正常運作情況,在主機沒有對資料庫操作的情況下測試主備資料是否一緻,經檢視主機和備機的的test1表,記錄相同,說明備機成功複制資料。

3.       主機和備機都正常運作情況,停掉備機mysql,對主機進行添加記錄的操作,然後再重新開機備機mysql,經檢查,兩邊資料完全一緻。

4.       主機和備機都正常運作情況,在主機執行mysql>

delete fromtest1 where id=3;

檢測兩邊資料是否一緻。經檢查,兩邊資料完全一緻。