首页 > 代码库 > 主从同步、代理

主从同步、代理

一、 mysql主从同步(mysql AB复制)

1.1. 目的实现数据的自动备份

1.2. Mysql主从同步的结构

一主一从

一主多从

主从从

主主结构(互为主从)

配置一主一从:

公共配置:

1、 配置固定ip

2、 启动数据库服务

3、 关闭iptables  selinux

4、 物理连接没问题

     主从的UUID不能相同(/var/lib/mysql/auto.cnf)

    *从数据库服务器上一定要有数据库服务器上的库和表,且表结构也要一致2.1 配置主数据库服务器

1、 主配置文件

Vim /etc/my.cnf (配置文件的模板//usr/share/mysql/my-default.cnf)

[mysqld]

Log_bin

Server_id=253(不能重复,此处为ip的主机位)

2、 在数据库服务器中授权

grant   replication  slave  on  *.*  to  slaveuser@“客户端ip”

identified  by“密码”;

service   mysql  restart    //重启服务

3、 在从服务器上登录

[root@localhost ~]# mysql –h主服务ip-uslaveuser –p密码

3.1配置从数据库服务器

1、 service  mysql  start

2、 修改自己的配置文件

Vim  /etc/my.cnf

[mysqld]

Server_id=252

Service  mysql  restart

3、 用本机的数据库服务器管理员登录,指定自己做谁的从数据库服务器。

Mysql  -hlocalhost   -uroot   -ptarena

Change  master  to  master_host=ip主, //连接的主服务器

Master_user=slaveuser,               //从连接时的用户名

Master_password=tarena             //从连接密码

Master_log_file=localhost-bin.000001  //当前用的日志

Master_log_pos=120;//从主服务器上查看。show master status;

库服务器的状态·

Mysql> show slave status\G;   //查看从数据库服务器的状态

Slave_IO_Running : yes

Slave_SQL_Running : yes

如果是no则

Start slave;     //启动从服务

与从服务器相关的文件

Ls   /var/lib/mysql/

Master_info            //保存自己连接的主数据库服务器的信息

Localhost-relay-bin.000001     //relaybinlog日志

Localhost-relay-bin.index  //保存已有的relaybinlog日志文件名

Relay-log.info      //relaybinlog日志信息

4、 验证从数据库服务器是否能同步主数据库服务器上的数据

192.168.10.253:(主服务器端)

mysql -uroot –ptarena     //登录数据库

mysql> create  database  test100;    //创建库

mysql> use  test100;            //切换库

mysql>create table  a (id int);    //创建表

            insert into  a values(100);  //插入值

            insert into  a values(200);

            insert into  a values(300);

192.168.10.252:(从服务器端)

mysql -uroot –ptarena

select  *  from  test100.a;   能够看到 a表的3条记录 就  ok  了。

(1) Mysql主从同步的工作过程

Show   slave  status\G

Slave_IO_Running : yes

Slave_SQL_Running : yes

(2) 2个IO SQL 要同时处于YES状态 数据才可以同步成长

IO 连接主数据服务器,把主数据服务器binlog日志里内容,copy到本机的relaybinlog日志里

IO 进程出错:连接不上主数据服务器(物理线路、安全问题、授权用户),当前binlog日志名pos点和master上的不一致

(3) SQL执行本机relaybinlog日志里的SQL语句,把数据写表里。

SQL进程出错:从数据服务器本机没有主数据服务器上的库和表,

5、 常用的其他选项

ü 适用于master服务器

Binlog-do-db=name:设置master对哪些库记日志

Binlog-ignore-db=name:设置master对哪些库不记日志

ü 适用于slave服务器

Log-slave-updates:记录从库更新,允许链式(主从从结构)复制(A-B-C)

Relay-log=dbsvr2-relay-bin:指定中继日志文件名

Replicate-do-db=mysql:仅复制指定库,其他库将被忽略,此选项可设置多条(省略时复制所有库)

Replicate-ignore-db=test:不复制哪些库,其他库将忽略,ignore-db与do-db只需选择一种

Report-host=dbsvr2:报告给master的主机名或ip地址

Slave-net-timeout=60:出现网络中断时,重试超时(默认60秒)





二、 搭建MySQL代理服务器(mysql读写分离)

1、 案例拓扑:

spacer.gif

代理服务启动时会设置负责写的数据库,负责读数据库服务器

               调用脚本来区分用户的访问类型

                指定自己监听的端口

在后端的数据库服务器上配置。

(1)授权代理(主从à代理)

Grant  all   on  *.*  to proxyuser@%

identified by 123456

(2)在主、从服务器上创建库、表(为了在测试时效果明显,主从的表中插入不同的数据)

主:mysql> create database prodb;

mysql> create table a(

   -> id int(3)

   -> );

mysql> insert into a values (100);

从:mysql> create database prodb;

   mysql> create table a(

   -> id int(3)

   -> );

  mysql> insert into a values (300);

在代理测试:

登录主:

[root@localhost ~]# mysql -h192.168.10.253 -uprouser -p123456

登录从:

[root@localhost ~]# mysql -h192.168.10.252 -uprouser -p123456


2、 配置代理服务

先配置代理服务器,再配置主从。

(1)主服务器释放3306端口 :service  mysqld   stop

                           Chkconfig  mysqld  off

(2)安装软件包

[root@localhost~]#tar zxf                //解压软件包

mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gzC /usr/local

[root@localhostlocal]#mv                  //改名字

mysql-proxy-0.8.3-linux-rhel5-x86-64bit/  mypro

[root@localhost ~]# cd /usr/local/mypro/

[root@localhost mypro]# ls

bin (启动脚本) include lib libexec(可执行程序) licenses  share

[root@localhostmypro]# chmod +x

share/doc/mysql-proxy/rw-splitting.lua

3、 启动mysql-proxy

主要命令选项:

-P:指定代理监听的ip地址、端口

-r:指定读服务器的ip地址、端口

-b:指定写服务器的ip地址、端口

-s:指定lua监本文件的路径

--keepalive:若进程崩溃,自动启动此进程

[root@localhost ~]# cd /usr/local/ mypro/bin

[root@localhost bin]# ./mysql-proxy -P 192.168.10.251:3306 -r 192.168.10.252:3306 -b 192.168.10.253:3306 -s /usr/local/mypro/share/doc/mysql-proxy/rw-splitting.lua &

[root@localhost bin]# netstat -untpal | grep :3306

tcp        0      0 192.168.10.251:3306         0.0.0.0:*                   LISTEN      4344/mysql-proxy

4、 测试

客户端通过代理访问数据库服务器上的数据。

[root@localhost bin]# mysql -h192.168.10.251 -uprouser -p123456            //在本机登录(本机ip)

(1) 并发连接数达到多少时区分用户的读写操作?大于5时

(2) 没有超过并发连接数时如何分发用户的读写操作?

读写操作都由写的服务器负责

(3) 当并发连接数,减小到默认的最大并发连接数之后,是否还区分用户的读写操作?  区分读写操作