mysql主从同步


MYSQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的管理也就显得非常重要,新手往往在出现主从同步错误的时候不知道如何入手,这篇文章就是根据自己的经验来详细叙述mysql主从的管理。

MYSQL主从同步的作用

(1) 数据分布
(2) 
负载平衡(load balancing)
(3) 
备份
(4) 
高可用性(high availability)和容错

MYSQL主从同步的原理

关于MYSQL的主从同步,最主要的是要了解MYSQL的主从同步是如何工作的也即主从同步的原理,通过下图能很明白的指导其工作的过程:

20639775_1340695881N7L6.jpg

大致描述一下过程:从服务器的IO线程从主服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在从上执行中继日志中的内容,从而使从库和主库保持一致。主从同步的详细过程如下:

1. 主服务器验证连接。

2. 主服务器为从服务器开启一个线程。

3. 从服务器将主服务器日志的偏移位告诉主服务器。

4. 主服务器检查该值是否小于当前二进制日志偏移位。

5.  如果小于,则通知从服务器来取数据。

6.  从服务器持续从主服务器取数据,直至取完,这时,从服务器线程进入睡眠,主服务器线程同时进入睡眠。

7. 当主服务器有更新时,主服务器线程被激活,并将二进制日志推送给从服务器,并通知从服务器线程进入工作状态。

8. 从服务器SQL线程执行二进制日志,随后进入睡眠状态。


环境:

主从服务器上的MySQL数据库版本同为5.1.34
主机IP192.168.1.200
从机IP192.168.1.201

 

现在主库上创建库和表做测试用

Mysql> create database test2;

Mysql> use test2;

Mysql> 

create  table  blog_user
(
   user_Name  char (15)  not  null  check (user_Name != '' ),
   user_Password  char (15)  not  null ,
   user_emial  varchar (20)  not  null  unique ,
   primary  key (user_Name)         
 
)engine=innodb  default  charset=utf8 auto_increment=1;


 

一.  MySQL主服务器配置


1.编辑配置文件/etc/my.cnf (其余参数保持默认)

[mysqld]                               //必须在【mysqld】这个模块下

server-id=1                           //主从服务器的server-id 不能相同

log-bin=mysql-bin                    //开启二进制同步日志

#binlog-do-db=test2                 //需要同步的数据库,这行不写默认为所有库

binlog-ignore-db=information_schema,performacen_schema,mysql //不需要同步的数据库

 

2.建立用户
 mysql> grant replication slave on *.* to 
wenqiang@192.168.1.201identified by ‘123456′;

//允许用户wenqiang 使用密码:123456 ,从192.168.1.201这台从服务器登陆主服务器

mysql>flush privileges;    //刷新权限
 
                                                        

 // 可在Slave上做连接测试: mysql -h 192.168.1.200  -u  wenqiang  �Cp


3.锁主库表

 mysql> FLUSH TABLES WITH READ LOCK;

 

4.显示主库信息

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB|

+------------------+----------+--------------+------------------+

| mysql-bin.000007 |      371 | test2        | mysql            |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

 

5.另开一个终端,备份(导出)需要复制的数据库

# mysqldump -u root --opt --default-character-set=utf8 -p --all-     databases >/tmp/master.sql

导出sql脚本

mysqldump -u 用户名 -p 数据库名 > 存放位置

mysqldump -u root -p test > c:/a.sql



//用mysqldump命令导出字符集为(utf8)的所有数据库,导出到目录/tmp下的master.sql


 

 

二.  MySQL从服务器配置


1、  将主数据库的master.sql传输到从服务器的 /tmp目录下

 #scp -pr /tmp/master.sql 192.168.1.121:/tmp


2 导入数据库

 # mysql  -u root  -p --default-character-set=utf8   < master.sql

   

导入sql脚本

mysql -u 用户名 -p 数据库名 < 存放位置

mysqljump -u root -p test < c:/a.sql


3、解锁主库表

mysql> UNLOCK TABLES;


4、  编辑/etc/my.cnf(其余参数保持默认)

[mysqld]                                   //必须在【mysqld】这个模块下

Server-id=2                                //不能与master的id相同

log-bin=mysql-bin                                                         //开启二进制日志
master-port=3306                                                        //端口号
master-connect-retry=60      #如果从服务器发现主服务器断掉,重新连接的时间差



5、SLAVE上设置同步

mysql> slave stop;                                                        //关闭slave 服务
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.200',MASTER_USER='wenqiang',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=371;

#使用用户wenqiang登陆主服务器192.168.1.200,并复制mysql-bin.000007371


6、启动SLAVE服务

mysql> slave start;


7、查看SLAVE状态

mysql> SHOW SLAVE STATUS\G;

其中 Slave_IO_Running  Slave_SQL_Running 两列的值都为 "Yes",表明 Slave  I/O  SQL 线程都在正常运行




你可能感兴趣的:(服务器,database,primary,配置文件)