MYSQL 資料庫同步(主從模式)

回覆文章
yehlu
Site Admin
文章: 3245
註冊時間: 2004-04-15 17:20:21
來自: CodeCharge Support Engineer

MYSQL 資料庫同步(主從模式)

文章 yehlu »

--------------------------------------------------------------------------------

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明

http://www.5ilinux.com/mysql01.html




MYSQL的master/slave数据同步配置



我的测试环境.基本上数据是瞬间同步,希望对大家有帮助

redhat 9.0
mysql3.23.57


mysql数据同步备份

A服务器: 192.168.1.2 主服务器master
B服务器: 192.168.1.3 副服务器slave


A服务器设置

#mysql –u root –p
mysql>GRANT FILE ON *.* TO backup@192.168.1.3 IDENTIFIED BY ‘1234’;
mysql>\exit

上面是Master开放一个账号backup密码1234给IP:192.168.1.3有档案处理的权限


mysqladmin –u root –p shutdown

备份Master所有数据库..通常都用tar指令.
#tar –cvf /tmp/mysql.tar /var/lib/mysql
注意:tar的时候,MySQL是要在stop情况下

在A机器上修改/etc/my.cnf
在[mysqld]区段内加入参数
log-bin
server-id=1
sql-bin-update-same
binlog-do-db=vbb

重启A服务器mysql

此时因为有加入log-bin参数,因此开始有index产生了,在/var/lib/mysql目录下有.index档案纪录数据库的异动log.


B服务器设置

设定/etc/my.cnf
在[mysqld]区段加入

master-host=192.168.1.2
master-user=backup
master-password=1234
master-port=3306
server-id=2
master-connect-retry=60 预设重试间隔60秒
replicate-do-db=vbb 告诉slave只做vbb数据库的更新
log-slave-updates


将A上的mysql.tar copy到B上
用ftp传B的/tmp
9.解压缩
#cd /var/lib/


状况测试
1.A跟B网络及服务都正常情况下,由A端变化数据后,到B端浏览数据,检视是否有进行replication?!
2.模拟B当机,或是B不一定需要一直跟A有连接.
将由A端变化数据后,到B端浏览数据,B点应该是没有数据变化的


#tar xvf /tmp/mysql-snapshot.tar
#chown –R mysql:mysql mysql

1重启B服务器的mysql

这时在/var/lib/mysql目录会出现master.info,此档案纪录了Master MySQL server的信息.



状况测试
1.A跟B网络及服务都正常情况下,由A端变化数据后,到B端浏览数据,检视是否有进行replication?!
2.模拟B当机,或是B不一定需要一直跟A有连接.
将由A端变化数据后,到B端浏览数据,B点应该是没有数据变化的



作者:张微波

2003-08-06 于北京
schumi
Site Admin
文章: 696
註冊時間: 2004-04-15 14:30:34

Re: MYSQL 資料庫同步(主從模式)

文章 schumi »

http://www.died.tw/2010/09/mysql.html

這次在MySql上做複寫,是使用MySql本身的replication solution,所以不需要外掛third party軟體。我是使用兩台電腦進行複寫的動作,將A的指定資料庫複寫到B。

Ubuntu A(192.168.220.130)
Ubuntu B(192.168.220.132)

安裝與設定步驟如下(為方便起見,我是使用root帳號去做)




如果還沒安裝mysql的話,在Ubuntu A與B上安裝mysql

$ sudo apt-get install mysql-server mysql-client
安裝mysql



在Ubuntu A建立複寫用帳號

$ mysql -p
進入mysql

mysql> create database testdb;
建立測試用的DB

mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.220.132 IDENTIFIED BY 'password';
建立一個有複寫權限的帳號repl,可從192.168.220.132連來,密碼為password



將兩台機器上的mysql資料統一

$ service mysql stop
將兩台的mysql停下

$ cd /var/lib/mysql
在Ubuntu A上切到mysql資料夾

$ tar -vxf /root/mysqldb.tar ./
將mysql下的資料全部壓縮起來

$ scp /root/mysqldb.tar root@192.168.220.132:/var/lib/mysql
mysqldb.tar 100% 21MB 10.4MB/s 00:02
將壓縮檔丟到Ubuntu B

到Ubuntu B
$ cd /var/lib/mysql
切到mysql資料夾

$ tar -xvf mysqldb.tar
將壓縮檔解壓,完成資料同步


修改設定檔

$ vi /etc/mysql/my.cnf
修改兩台的my.cnf設定檔
Ubuntu A,在[mysqld]下面修改這些,如果沒有則新增

server-id = 1 (隨意設,兩台要不一樣)
log_bin = /var/log/mysql/mysql-bin.log (我只有將#拿掉,路徑用預設的)
binlog_do_db = testdb (需要同步的database)
#binlog_ignore_db = include_database_name (不需要同步的database)


Ubuntu B,在[mysqld]下面修改這些,如果沒有則新增

server-id = 2 (隨意設,兩台要不一樣)
log_bin = /var/log/mysql/mysql-bin.log (我只有將#拿掉,路徑用預設的)
binlog_do_db = testdb (需要同步的database)
#binlog_ignore_db = include_database_name (不需要同步的database)
master-host =192.168.220.130 (Master的ip)
master-user =repl (Master 給replication的帳號)
master-password =password (該帳號的密碼)
master-port =3306 (Master mysql使用的port)
master-connect-retry =60 (多久retry一次)



啟動複寫

$ service mysql start
將兩台的mysql啟動


mysql> show master status;

+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | testdb | |
+------------------+----------+--------------+------------------+

顯示master的資訊,File與Position這兩個欄位是等等要使用的


到Ubuntu B

$ mysql -p
進入mysql

mysql> slave stop;
將 slave 停下

mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.220.130',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='password',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=106;
將Master的資訊設給Slave

mysql> slave start;
啟動slave

mysql> show slave status\G;
顯示salve資訊,下面這兩項都是Yes的話就表示設成功了
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


測試資料同步

在Ubuntu A

mysql> use testdb;
指定testdb;

mysql> create table tbl_test(si int) engine=InnoDB;
創一個測試table

mysql> insert into tbl_test (si) values(1);
塞入一筆資料

到Ubuntu B

mysql> use testdb;
指定testdb;

mysql> select * from tbl_test;

+------+
| si |
+------+
| 1 |
+------+

1 row in set (0.05 sec)
如果有資料表示同步測試成功。
saboor
文章: 1
註冊時間: 2015-04-10 17:31:17

Re: MYSQL 資料庫同步(主從模式)

文章 saboor »

與前面的例子一樣,由於firstname和lastname出現在WHERE子句中,因此這兩個列仍舊有建立索引的必要。除此之外,由於town表的townid列出現在join子句中,因此我們需要考慮建立該列的索引。
Cut down your exam stress by using our latest http://esixsigma.org/ exam and high quality Olivet College and testkingmcdst demos. We provide updated sdudk Best wishes.
回覆文章

回到「MySQL」