目录:   一,主从同步

              二,数据读写分离

          

一,mysql主从同步。

1.1什么是主从同步

1.2主从同步的工作原理

1.3配置主从同步,并验证配置

1.4 主从同步结构模式

1.5主从同步常用配置参数

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1.1什么是主从同步?
让其他的Mysql数据库服务器和正在被访问的数据库服务器上的数据保持一致。
 
1.2主从同步工作原理?
IO线程:把主库binlog日志里的sql命令保存到本机的中继日志文件里    
SQL线程:执行本机中继日志文件里sql命令,把数据写进本机的数据库服务器里。
 
1.3配置主从同步 并验证配置
主库的配置步骤:
(1)用户授权: grant replication slave on *.* to plj@“192.168.4.52” identified by "123456";
(2)使用binlog日志:
vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=/binlogdir/master51
binlog_format="mixed"mkdir /binlogdir          
 chown mysql /binlogdir/    
 systemctl restart mysqld
(3)查看正在使用的binlog文件信息
 mysql-> show  master  status;

 

环境准备:关闭防火墙,selinux,确保主库的数据和从库的数据要一致。

保留初始4个库。

 

从库的配置步骤

测试主库用户授权:mysql  -h192.168.4.51   -uplj  -p123456
指定server_id
vim  /etc/my.cnf  s
[mysqld]
server_id=52
log_bin=/mylog/slave52数据库管理配置主库信息
mkdir /mylog
chown -R mysql  /mylog
systemctl restart mysqld  ; mysql -uroot -p123456
发起同步操作:
mysql-> change  master  to master_host='主服务器IP',
         -> master_user='plj', (被授权用户名)
         -> master_password='密码' ,(被授权用户密码)
         -> master_log_file='日志文件',  //可以在主上面show master status
         -> master_log_pos=偏移位置;  //可以在主上面show master status
start  slave  开启服务 //如果以后要更改信息要先stop slave在去修改。
查看本机IO线程和SQL线程
mysql -> show  slave  status\G;
mysql->stop  slave;
mysql->start slave;
               Last_IO_Error:IO进程报错信息
               Last_SQL_Error:SQL进程报错信息
 
在库下的数据库目录下多处来的文件:
master.info   记录主库信息
主机名-relay-bin.编号   中继日志文件
主机名-relay-bin.index  索引文件(记录已有的中继日志文件)
relay-log.info     记录中继日志信息
 
主库:show processlist;
可以看到有个binlog dump 这个程序每次新进sql命令都会通知从库上面的I/O线程去实现同步更新。
实现最终效果:从库实现增,删,改的实时同步。对主库上的所有操作
在从库上都会有对应数据。
 
暂时关闭从库: stop slave ;  show slave status;
取消从库定义:删除主目录下面的几个文件
                         rm -rf  master.info  relay-log.info mysql52-relay-bin.* 
                         重起服务******************************************************************************************1.4主从同步的结构模式
一主一从
一主多从
主从从
主主结构
1.5主从同步常用配置参数(/etc/my.cnf)
主库的配置参数(在主库的设置对所有的从生效)
binlog_do_db=库名列表 用,间隔符号  #只允许同步的库
binlog_ignore_db=库名列表 用,间隔符号  #只不允许同步的库
 
从库的配置参数(只有对从库自己生效)
log_slave_updates //允许级联复制
relay_log=文件名  //指定中继日志文件的名字
replicate_do_db=库名列表 用,间隔符号  #只同步的库
replicate_ignore_db=库名列表 用,间隔符号  #只不同步的库
*************************************************************************************
二,数据读写分离(maxscale软件+一主一从结构)
mysql中间件(和mysql服务一起提供服务的软件)
实现读写分离的软件:mycat   mysql-proxy   maxscale
2.1什么是数据读写分离
把客户端访问数据时的查询请求和写入请求
                            分别给不同的数据库服务器处理。
2.2为什么要做读写分离
减轻单台服务器的并发访问压力同时提高硬件的利用率。
3.3配置读写分离
(1)配置主从同步(一主一从  51(主)  52 (从))
(2)配置代理服务器55
1,把数据库服务停止并设置开机不运行,禁用selinux 和firewalld
2,装包  修改配置文件  用户授权 启动服务   查看端口号
rpm -Uvh maxscale-2.1.2-1.rhel.7.x86_64.rpm 
cp /etc/maxscale.cnf  /root/
vim /etc/maxscale.cnf
 9 [maxscale]
 10 threads=auto   //用来自动匹配cpu的线程 18 [server1]   :定义监听主机1
 19 type=server
 20 address=192.168.4.51
 21 port=3306
 22 protocol=MySQLBackend
 23 
 24 [server2]   :定义监听主机2
 25 type=server
 26 address=192.168.4.52
 27 port=3306
 28 protocol=MySQLBackend 36 [MySQL Monitor]
 37 type=monitor
 38 module=mysqlmon
 39 servers=server1,  server2  //定义监听主机
 40 user=scalemon    //监听主机的登陆用户
 41 passwd=123456
 42 monitor_interval=10000 53 #[Read-Only Service]   //注释行
 54 #type=service
 55 #router=readconnroute
 56 #servers=server1
 57 #user=myuser
 58 #passwd=mypwd
 59 #router_options=slave 64 [Read-Write Service]
 65 type=service
 66 router=readwritesplit
 67 servers=server1,  server2  //额外添加主机
 68 user=maxscale    //用来检测客户机登陆用户是否存在的用户
 69 passwd=123456        
 70 max_slave_connections=100%86 #[Read-Only Listener]  //注释掉这些行
 87 #type=listener
 88 #service=Read-Only Service
 89 #protocol=MySQLClient
 90 #port=4008 92 [Read-Write Listener]
 93 type=listener
 94 service=Read-Write Service
 95 protocol=MySQLClient
 96 port=4006
 97 
 98 [MaxAdmin Listener]
 99 type=listener
100 service=MaxAdmin Service
101 protocol=maxscaled
102 socket=default
103 port=4016 //额外添加行在主从数据库上授权:
grant replication slave,replication client on *.* to 
 -> scalemon@'%' identified by "123456";  //授权给maxscale软件连接用户监听权限
grant select on mysql.* to maxscale@'%' identified by "123456"; //授权maxscale软件maxscale     用户查询权限,用来检测代码登陆用户是否存在。  
测试:mysql  -h51/52主机IP  -u授权用户 -p密码 去测试是否可以登陆
3,访问管理端口查看主从同步状态信息及数据库服务的状态
maxscale -f /etc/maxscale.cnf   //启动服务 
netstat  -antpul | grep maxscale  //查看进程
ps -C maxscale   //查看进程pid  
停止服务:killall  -9  maxscale
#maxadmin -uadmin -pmariadb -P4016
list servers //查寻读写分离客户机的运行状态。
 
3.4测试配置?在客户端测试配置
注意:tony手动去主服务授权对一个库.*授权all权限.
#mysql  -h192.168.4.55  -P4006  -utony  -p123456
mysql -> 使用一个查询语句/一个写入命令。

测试是否读写分离,读在52服务器,写在51服务器。

 

3.5配置分离结构有什么缺点?

单点故障,数据量大的时。数据传输会有瓶颈。

3.6数据读写分离拓扑结构

                   4.254

                       |

                       |

                      55(安装maxscale软件)

+++++++++++++++++++++++++++

      51主                      52从