18. Linux MySQL主从配置

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;

可以看到:

 

 

posted @ 2017-10-20 13:22  xu_shuyi  阅读(163)  评论(0)    收藏  举报