Mysql主从同步

 

 

一、Mysql主从同步原理

 

master的数据更改操作存入二进制日志中

slave开启了两个线程,I/O线程和SQL线程,I/O线程读取master的二进制日志写入本地中继,SQL读取中继日志后进行日志重放,即在slave上执行相同的操作,使数据库与master同步。应用程序对master可进行读写操作,对slave只能进行读操作。

二、Mysql主从部署

1、 master配置修改

vi /etc/my.cnf

[mysqld]

server-id=1         //服务器唯一ID,默认是1,主从要不同

log-bin=mysql-bin   //启用二进制日志

binlog_do_db=test   //要进行同步的数据库名

 

2、 slave配置修改

[mysqld]

server-id=2

log-bin=mysql-bin

master_host=172.16.1.16   //masterip

master_user=replication    //master数据库用于同步的用户名

master_port=3306         //master数据库端口

mater_connect_retry=60    //每隔60秒同步一次

replicate-do-db=test        //需要同步的库名

 

3、 帐号权限设置

slave使用master上的replication@%账户登陆master与其进行通信,这个账户在master上要真实存在并有replication slave和read属性

mysql>grant replication slave on *.* to ‘replication’@’%’ identified by ‘123456’;

mysql>flush privileges;    //刷新权限,使设置生效

4、 功能启动及状态查看

重启两台服务器的mysql: service mysqld restart

1).登录mastermysql

mysql>show master status;

 

2).登录slavemysql

mysql>slave start;         //启动slave服务

mysql>show slave status\G

 

Slave_IO_RunningSlave_SQL_Running两项均为Yes,则状态正常。

三、功能验证

验证前需要保证Master和Slave数据库内容一致,否则可能会出现同步错误,若出现错误,则可在配置的mysql服务器日志中查看,默认日志路径为/var/log/mysqld.log。

在master的test数据库中创建表user并添加一条数据

mysql>create table user

 (

 name char(15) not null,

pass char(15) not null,

primary key(name)

 );

        mysql>insert into user(name,pass) values(‘test’,’test’);

       在slave中查看test数据库当前表以及表内容

      

      

       可看到slave中已同步了master的操作。

 

    注:mysql主从不同步问题解决

    某些主从数据库数据不一致的情况会导致主从通信无法正常继续,一旦出现不能同步,应该先解决同步位置的问题,修复丢失的数据。

1、  停掉slave服务

mysql>slave stop;

2、  到master上查看主机状态,记下File和Position的值。

mysql>show master status;

 

3、  到salve上执行手动同步:

mysql>change master to

>master_host=’172.16.1.16’,

>master_user=’replication’,

>master_password=’123456’,

>master_port=3306,

>master_log_file=’mysql-bin.000001’,

>master_log_pos=885;

4、开启slave服务

   mysql>slave start;

posted @ 2014-04-18 16:16  Verruckt  阅读(187)  评论(0编辑  收藏  举报