Mysql主/从配置

   Mysql支持单向异步复制,一台为主服务器,一台或多台为从服务器。主服务器负责:更新写入二进制文件并维护文件的一个索引跟踪日志循环如:ls /var/log/mysql/
updatelog.000001  updatelog.index

   从服务器连接主服务器时候,通知主在日志中记录的最后一次成功更新位置,从开始更新自己。

   主/从切分处理客户查询可以减轻负载,主/从都可以select查询,更改必须在主上进行。而且还可以使用一个服务器进行备份,不会干扰主,备份时候主可以继续处理更新。

   MySQL使用3个线程来执行复制功能(其中1个在主,另两个在从),当在从服务器发出: START  SLAVE时,从服务器创建一个 I/O 线程,连接主并让主发送二进制文件,主创建一个线程将二进制文件发送到从数据目录中本地文件中,即中继日志,第三个线程是SQL线程,从使用此线程读取中继日志并执行日志的更新。

    从服务器在数据目录:/usr/local/mysql/var中另外创建两个状态文件:master.info和relay-log.info,这两个文件不会丢失,下此启动服务器时,读取这些文件确定它已经从主服务器读取多少二进制日志,以及处理自己中继日志的程度。

 实验环境:两台虚拟机:主:192.168.0.2 从:192.168.0.3

先安装好两台虚拟机,启动mysql服务,互相能ping通

主服务器:

1、#mysql  -uroot  -p123456

 GRANT REPLICATION SLAVE ON *.* to 'bruce'@'192.168.0.%'IDENTIFIED BY '123456'           //先授权bruce账户授予REPLICATION  SLAVE权限,仅用于复制

create database test1;       //建立测试库

use test1

create table user(id int(4),name varchar(20));

insert into user values(1,"mary");
insert into user values(2,"joe");                  //建立表,插入数据

flush privileges;                   //刷新

2、配置 /etc/my.cnf

log-bin=mysql-bin     //启动二进制日志系统
server-id = 1         //本地数据库ID表示为主服务器
log-bin=/var/log/mysql/updatelog   //设定生成log文件名,路径自己建立
binlog-do-db=test1         //二进制需要同步的数据库名

binlog-do-db=test1     //多库就写多行,一起传过去
binlog-ignore-db=mysql,test    //避免同步mysql用户配置,单独摘除

#mkdir  /var/log/mysql
chown -R mysql:mysql   /var/log/mysql      //创建更新日志目录给mysql用户权限

FLUSH TABLES WITH READ LOCK;        //mysql执行清空所有表和块写入语句
cd  /usr/local/mysql/var
tar czvf /tmp/test1.tar.gz test1                        //打包备份主服务器数据目录,传到从服务器/usr/local/mysql/var目录中

scp  /tmp/test1.   192.168.0.104:/usr/local/mysql/var
UNLOCK TABLES;                   //对主服务器进行解锁

#service  mysqld    restart                   //重启mysql

3、配置从服务器

server-id       = 2                           //配置从服务器

master-host     =  192.168.0.103         //指定服务器IP

master-user     =   bruce                        //指定同步的用户

master-password =   123456                    //密码

master-port     =  3306                            //同步的端口

master-connect-retry = 60                       //断点从新连接时间

replicate-ignore-db = mysql                   //屏蔽对mysql库同步

replicate-do-db = test1                           //同步数据库名称

binlog-do-db=test1                                  //多库就写多行

4、从服务器装主服务器数据库

# tar zxvf test1.tar.gz

#rm -fr test1.tar.gz

#service   mysqld    restart

mysql>start   slave;                           //启动从服务器线程

mysql> show  master  status;          //验证配置,在主上验证
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000001 |      211 | test1        | mysql,test       |
+------------------+----------+--------------+------------------+

mysql>show  slave  status\G;                     //验证从服务器

Slave_IO_Running: Yes
Slave_SQL_Running: Yes                          //都是yes表示成功

5、测试

主服务器:
use test1
create table  zhao(id int(4),name varchar(20));     //建立一个表
mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| user            |
| zhao            |
+-----------------+

从服务器:mysql> show tables;
+-----------------+
| Tables_in_test1 |
+-----------------+
| user            |
| zhao            |
+-----------------+                              //测试成功