MySQL的主從複製配置

  在這裏分兩個狀況:一、兩臺服務器中都沒有數據 二、主服務器上已經有數據,此時再開啓從服務器
1、兩臺服務器中都沒有數據
  在複製結構中從服務器的mysql的版本要比主服務器的同樣或者高也行。
主mysql的ip是192.168.0.1
從mysql的ip是192.168.0.2
端口都是:3306
mysql的版本5.1.61源碼編譯安裝

1.主服務器執行以下
修改配置文件:
在/etc/my.cnf中添加啓動二進制文件
[client]
port            = 3306
socket          = /tmp/mysql.sock

[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
datadir         = /usr/local/mysql/var
skip-locking
wait_timeout = 30
table_lock_wait_timeout = 30
#skip-grant-tables
key_buffer = 384M
max_allowed_packet = 32M
table_cache = 128M
sort_buffer_size = 8M
net_buffer_length = 8K
read_buffer_size = 8M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size = 16M
thread_cache_size = 64
thread_stack = 512k
query_cache_size = 64M
tmp_table_size = 256M
log-error=log-error.log

log-bin=mysql-bin  #二進制日誌,主庫必須開啓


#哪一個數據庫不須要複製
binlog-ignore-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema

server-id=100  #默認是1,服務器ID號,整數值,保證惟一標識一臺服務器就能夠

進入主mysql執行以下語句
在主服務器上建立複製賬號,授予相應的權限。注意,複製賬號的口令最好不要超過6位,並且不要帶"#"等特殊字符。
mysql>grant replication slave on *.* to 'backup'@'192.168.0.2' identified by '123456';
mysql>FLUSH PRIVILEGES;
建立backup用戶,並受權給192.168.0.2使用
查詢主數據庫狀態,並記下FILE及Position的值
show master status;
修改完成後從新啓動mysql服務

2.從服務器執行以下
在/etc/my.cnf的mysqld下添加
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
datadir=/usr/local/mysql/var

master-host=192.168.0.1  #主庫地址,必須使用IP,不能使用域名
master-user=backup  #從庫鏈接主庫使用該用戶名
master-password=123456
master-connect-retry  #選項控制重試間隔。默認爲60秒。

table_lock_wait_timeout=30
wait_timeout=30
skip-locking

key_buffer = 384M
table_cache = 128M
sort_buffer_size = 8M
read_buffer_size = 8M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size = 16M
thread_cache_size = 64
thread_stack = 512K
query_cache_size = 64M
tmp_table_size = 256M
max_allowed_packet = 32M  #任何生成的中間字符串的最大大小。默認爲16M,最低配置32M,且不能小於主庫該項的值
read-only  #設置從服務器爲只讀的,避免在從庫上進行寫操做,致使主從數據不一致
skip-slave-start  #啓動數據庫後,需手動開啓同步進程

log-error=log-error.log

#log-bin=mysql-bin  #關掉二進制日誌
server-id=200  ##id號必定不能與主服務器的id號相同
添加以下內容:   ##這些是開啓中繼日誌的
relay-log=relay-bin  #中繼日誌,從庫開啓
relay-log-index=relay-bin.index

設置忽略複製系統數據庫
#replicate-do-db=   #須要同步的表,多個表須要屢次指定,若是不明確指定禁止複製,默認就是容許複製
replicate-ignore-db=test  #不須要同步的表,多個須要屢次指定
replicate-ignore-db=mysql
replicate-ignore-db=information_schemamysql

#replicate-ignore-db=test,mysql,information_schema   #不須要記錄日誌的數據庫名,多個數據庫中間用逗號(,)隔開正則表達式

replicate-wild-do-table = example1.%  #須要同步的表,支持正則表達式,數據庫example1下的全部表
replicate-do-table = example1.table1  #須要同步的表,多個表需屢次指定,數據庫example1下的table1
replicate-wild-ignore-table = mysql.%   #不須要同的表,多個表須要屢次指定
replicate-wild-ignore-table = test.%
replicate-rewrite-db = from_name->to_name  #同步庫重命名
slave-net-timeout = 3600  #在所設置的時間內若是沒有接收到來自主庫的更新,從庫則認爲和主庫的鏈接斷開或失效,從新創建和主庫的鏈接,默認爲3600秒,可根據實際需求調整

退出重新啓動從服務器/etc/init.d/mysqld restart or service mysqld restart
登錄從服務器執行以下語句sql

mysql>slave stop;
mysql>change master to
mysql>master_host='192.168.0.1',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=98;
注意:mysql-bin.00001和master_log_pos是在主服務器上查詢的 mysql>show master status;
啓動同步
mysql>start slave;
mysql>show slave status\G;
若是出現如下結果代表鏈接成功,則鏈接失敗。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


2、主服務器上已經有數據,此時再開啓從服務器

一、 在開啓從服務器以前要先把主服務器上的數據導入從服務器中。因此要先備份一下主服務器上的數據
# mysqldump -uroot -p --all-database > /tmp/all.sql

二、將備份複製到從服務器中
# scp /tmp/all.sql 192.168.0.2:/tmp/

三、在從服務器上,把備份導入服務器中
# mysql -uroot -p < /tmp/all.sql
Enter password:

四、下面就能夠鏈接了,可是在鏈接以前要先查看備份的文件
用命令head來查看
# head -30 /tmp/all.sql ##查看前30行的
有一行是:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;
說明要備份的位置是:MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98
因此在鏈接以前必定要說明這個位置

五、下面來開始備份
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;
返回的結果:Query OK, 0 rows affected (0.02 sec)
說明備份成功

六、下面就能夠啓動從服務器了
mysql>start slave;
mysql>show slave status\G     ##查看從服務器的狀態是否鏈接成功
以下所示說明成功鏈接:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

最後再來測試一下。 在主服務器上建立或者刪除數據庫、表,就能夠同步到從服務器上了。
mysql>create database aa;
mysql>use aa;
mysql>create table t1 (id int,name char(10));
mysql>insert t1 values (1,'han');
在從服務器上查看是否同步成功
mysql>show databases;
mysql>use aa;
mysql>select * from t1;


數據庫

相關文章
相關標籤/搜索