MySQL 主從配置
Author:xushuyi
參照技術:http://www.cnblogs.com/kevingrace/p/6256603.html
?
1. 主從數據庫
1、主庫:192.168.56.100
2、從庫:192.168.56.102
3、創建主從數據庫一定要保證主從數據庫字符集編碼的一致性,否則主從同步數據會發生異常。
因主從數據字符集編碼不一致,常見的問題如下:
1.?Column 1 of table 'xxx' cannot be converted from type 'varchar(33)' to type 'varchar(11)'
解決方案:http://www.cnblogs.com/wzbz/p/6825761.html
2. 一定要調整主從數據庫字符集編碼一致性
?
4、創建表時一定要加上字符集編碼 utf8 設置,避免主從數據同步異常問題,其實遇到問題類同 3
1、修改數據表字符集:ALTER TABLE transfervouchers CONVERT TO CHARACTER SET utf8;
2、創建表 設置字符集
create table jpgxhealthvalrecordhistory (ID bigint not null auto_increment comment '主鍵ID',activityid bigint comment '活動ID',userid bigint comment '用戶ID',activitylotteryid bigint comment '活動抽獎ID',activityawardid bigint comment '活動獎品ID',contributehealthvalue bigint comment '已貢獻健康值',createtime timestamp comment '創建時間',modifytime timestamp comment '修改時間',primary key (ID) )CHARACTER SET utf8; alter table jpgxhealthvalrecordhistory comment '獎品貢獻健康值歷史記錄表';
?
4、主庫一旦重啟,主庫對應二進制文件發生改變,從庫需要重新指向主庫新的二進制文件
master_host='192.168.56.100',master_user='slave',master_password='Sino@slave12345',? master_log_file='mysql-bin.000002',master_log_pos=400;
?
2.主庫配置:
#vi /etc/my.cnf
[mysqld]
????log-bin=mysql-bin ???//[必須]啟用二進制日志
??? server-id=1100 ??//[必須]服務器唯一ID,默認是1,一般取IP最后一段
binlog-do-db=imove ?//需要同步的數據庫。如果是多個同步庫,就以此格式另寫幾行即可。如果不指明對某個具體庫同步,就去掉此行,表示同步所有庫(除了ignore忽略的庫)
binlog-ignore-db=sys ?//#不同步mysql系統數據庫。如果是多個不同步庫,就以此格式另寫幾行;也可以在一行,中間逗號隔開
?
?
登錄主庫MySQL
#cd /usr/local/mysql
#./bin/mysql -u root -p
?
?
mysql> create user slave identified by 'Sino@slave12345';
mysql> grant all on *.* to slave@'192.168.56.102' identified by 'Sino@slave12345';
mysql> exit;
?
重啟主庫MySQL:
#/etc/init.d/mysql restart;
#show master status;
?
?
3.從庫配置:
vi /etc/my.cnf
log-bin=mysql-bin ?????//[必須]啟用二進制日志
server-id=102 ?????//[必須]服務器唯一ID,默認是1,一般取IP最后一段
replicate-do-db=imove //需要同步的數據庫名。如果不指明同步哪些庫,就去掉這行,表示所有庫的同步(除了ignore忽略的庫)
replicate-ignore-db=sys ?//不同步mysql系統數據庫
slave-skip-errors=all ????//跳過所有的錯誤錯誤,繼續執行復制操作; 這個配置最好不要加上,遇到問題就要解決問題,不能直接跳過
?
?
?
重啟主庫MySQL:
#/etc/init.d/mysql restart;
之后進入從庫MySQL 修改master配置:
登錄主庫MySQL
#cd /usr/local/mysql
#./bin/mysql -u root -p
mysql> change master to master_host='192.168.56.100',master_user='slave',master_password='Sino@slave12345', ?????master_log_file='mysql-bin.000002',master_log_pos=400;
查看從庫master是否配置成功:
?mysql> show slave status\G;
?
======------------------------------可能使用的命令:在更改 master 的時候------------============
STOP SLAVE IO_THREAD FOR CHANNEL '';
START SLAVE IO_THREAD FOR CHANNEL '';
?
?
?
上圖可以看到: Slave_IO_running: NO
Salve_SQL_Running: NO
需要對slave mysql 進行設置:
先關閉slave
mysql> stop slave
之后進行設置:
mysql> set global sql_slave_skip_counter =1 ;
之后再開啟:
mysql> start slave
mysql> show slave status\G
?
?
OK.
?
異常情況:
?
?
這個異常情況說明,從庫同步主庫二進制文件的位置不正確。
解決:http://www.linuxidc.com/Linux/2012-02/54729.htm
將binlog二進制文件轉換為txt文件
?
?
說明從庫同步主庫的二進制文件應該從 123 行開始。
登錄從庫MySQL:
mysql> stop slave;
mysql> change master to master_log_file='mysql-bin.000002',master_log_pos=123;
mysql> start slave;
mysql> show slave status\G;
?
?
4.驗證主從同步
之后登錄 master mysql, 進行如下操作:
create database hi_db;
use hi_db;
create table hi_tb(id int(3),name char(10));
insert into hi_tb values(001,'bobu');
show databases;
?
?
?
之后登錄slave mysql:
show databases;
可以看到:
?
?