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;
可以看到: