一、 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 [email protected]“客户端ip”
identified by“密码”;
service mysql restart //重启服务
3、 在从服务器上登录
[[email protected] ~]# 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、 案例拓扑:
代理服务启动时会设置负责写的数据库,负责读数据库服务器
调用脚本来区分用户的访问类型
指定自己监听的端口
在后端的数据库服务器上配置。
(1)授权代理(主从à代理)
Grant all on *.* to [email protected]”%”
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);
在代理测试:
登录主:
[[email protected] ~]# mysql -h192.168.10.253 -uprouser -p123456
登录从:
[[email protected] ~]# mysql -h192.168.10.252 -uprouser -p123456
2、 配置代理服务
先配置代理服务器,再配置主从。
(1)主服务器释放3306端口 :service mysqld stop
Chkconfig mysqld off
(2)安装软件包
[[email protected]~]#tar zxf //解压软件包
mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gz–C /usr/local
[[email protected]]#mv //改名字
mysql-proxy-0.8.3-linux-rhel5-x86-64bit/ mypro
[[email protected] ~]# cd /usr/local/mypro/
[[email protected] mypro]# ls
bin (启动脚本) include lib libexec(可执行程序) licenses share
[[email protected]]# chmod +x
share/doc/mysql-proxy/rw-splitting.lua
3、 启动mysql-proxy
主要命令选项:
-P:指定代理监听的ip地址、端口
-r:指定读服务器的ip地址、端口
-b:指定写服务器的ip地址、端口
-s:指定lua监本文件的路径
--keepalive:若进程崩溃,自动启动此进程
[[email protected] ~]# cd /usr/local/ mypro/bin
[[email protected] 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 &
[[email protected] bin]# netstat -untpal | grep :3306
tcp 0 0 192.168.10.251:3306 0.0.0.0:* LISTEN 4344/mysql-proxy
4、 测试
客户端通过代理访问数据库服务器上的数据。
[[email protected] bin]# mysql -h192.168.10.251 -uprouser -p123456 //在本机登录(本机ip)
(1) 并发连接数达到多少时区分用户的读写操作?大于5时
(2) 没有超过并发连接数时如何分发用户的读写操作?
读写操作都由写的服务器负责
(3) 当并发连接数,减小到默认的最大并发连接数之后,是否还区分用户的读写操作? 区分读写操作
主从同步、代理