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;
檢測兩邊資料是否一緻。經檢查,兩邊資料完全一緻。