配置主从同步的步骤

环境准备

从一定要有主库比自己多个的数据

systemctl   stop  firewalld

setenforce  0

物理连接能通 


配置主数据库服务器

1  用户授权  

grant  replication  slave  on   *.*  to   plj@"%"  identified by  "123456";

 

2 修改配置文件

vim /etc/my.cnf

server_id=12

log_bin=master12

log_format="mixed"

:wq

3 重启数据服务

systemctl  restart  mysqld


4 查看当前使用的 binlog日志信息

mysql  -uroot   -p123123

mysql> show master status;



配置从数据库服务器

1  验证主库授权用户

mysql  -h192.168.4.12   -uplj   -p123456

mysql> 


2  修改配置文件

vim /etc/my.cnf

server_id=11

log_bin=slave11   #可选

log_format="mixed"

:wq


3  重启数据服务

systemctl  restart  mysqld

4  管理员登录把自己指定为从数据库服务器

mysql -uroot  -p654321

mysql> show  slave status\G;

mysql> change  master  to  master_host="192.168.4.12",master_user="plj",master_password="123456",master_log_file="master12.000001",master_log_pos=154;


5  启动slave 进程

mysql> start  slave;


6  查看slave 进程状态信息

mysql> show  slave status\G;

slave_io_running: yes

slave_sql_running: yes


验证主从同步配置

客户端访问主数据库服务器,创建库 表记录 ,在从数据服务器上也能够看到



主从同步工作原理

slave_io_running:  把主数据库服务器上binlog日志里的sql 存放到本机的中继日志文件里。

Last_IO_Error: 报错信息

出错原因: 从服务器连接不上主数据库服务器

                   ping   firewalld   selinux   

                   change master to 的配置信息错误。


slave_sql_running:执行本机中继日志文件里的sql命令。

Last_SQL_Error: 报错信息


mysql>stop  slave;

mysql>change  master  to  选项=值,选项=值;

mysql>start  slave;


cd /var/lib/mysql/

master.info   连接主数据库服务器的信息

relay-log.info  中继日志文件

localhost-relay-bin.xxxxxx   中继日志文件

localhost-relay-bin.index     中继日志索引文件



把一台数据库服务器恢复为独立的数据库服务器。

#cd /var/lib/mysql

#rm -rf  master.info   relay-log.info    localhost-relay-bin.*

#systemctl  restart   mysqld


让从数据库服务器临时不同步数据(想同步再启动就可以了)

mysql>stop  slave ;


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

day06

mysql主从同步结构模式

一主一从

一主多从

主从从

主主结构(互为主从)

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

mysql主从同步配置参数

主数据库服务器使用的配置参数

/etc/my.cnf

[mysqld]

binlog_do_db=数据库名,数据库名    #只允许同步的库

binlog_ignore_db=数据库名,数据库名  #只不允许同步的库

:wq

#systemctl  restart   mysqld


从数据库服务器使用的配置参数

/etc/my.cnf

[mysqld]

log_slave_updates # 允许级联复制

relay_log=名       #中继日志文件名

replicate_do_db=数据库名,数据库名 #只同步的库

replicate_ignore_db=数据库名,数据库名  #只不同步的库

:wq

#systemctl  restart   mysqld

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

中间件maxscale


读写分离 (maxscale +  mysql主从同步)

maxscale-2.1.2-1.rhel.7.x86_64.rpm

需求 在主机192.168.4.10配置读写分离服务,客户端连接后,


把执行的查询请求分配给192.168.4.11主机,执行的写请求分


配给192.168.4.12主机,



配置

1  把11 主机配置为12的从数据库服务器


2 在主机10运行实现读写分离功能的服务maxscale


2.1 安装软件包

rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm


2.2 修改配置文件

# sed -i  '/#/d' /etc/maxscale.cnf

# vim /etc/maxscale.cnf

[root@localhost ~]# cat /etc/maxscale.cnf

[maxscale]

threads=1


[server1]

type=server

address=192.168.4.12

port=3306

protocol=MySQLBackend


[server2]

type=server

address=192.168.4.11

port=3306

protocol=MySQLBackend


[MySQL Monitor]

type=monitor

module=mysqlmon

servers=server1,server2

user=scalemon

passwd=111111

monitor_interval=10000


[Read-Write Service]

type=service

router=readwritesplit

servers=server1,server2

user=maxscale

passwd=111111

max_slave_connections=100%


[MaxAdmin Service]

type=service

router=cli


[Read-Write Listener]

type=listener

service=Read-Write Service

protocol=MySQLClient

port=4006


[MaxAdmin Listener]

type=listener

service=MaxAdmin Service

protocol=maxscaled

socket=default

port=6606

[root@localhost ~]# 


配置文件说明

0 设置服务运行启动的线程数量 

[maxscale]


1 数据库服务器成员  [server1]    [server2]


2 监控数据库服务器成员列表 [MySQL Monitor]

user=scalemon     //用户名

passwd=111111   //密码


3 指定在那些数据库服务器之间做读写分离

[Read-Write Service]

user=maxscale     //用户名

passwd=111111  //密码


4 定义管理服务       

[MaxAdmin Service]  


5 读写分离服务监控的端口号 

[Read-Write Listener]

   

6 指定管理服务监听的端口号

[MaxAdmin Listener]


2.2根据配置文件的设置添加授权用户(12   11)

scalemon用户

grant replication slave, replication client on *.* to scalemon@"%"  identified by “111111”;  //创建监控用户


maxscale用户

grant select on mysql.* to maxscale@'%' identified by "111111”;  //创建路由用户


2.4 启动maxscale

#maxscale  -f  /etc/maxscale.cnf

#netstat -utnalp  | grep :4006

#netstat -utnalp  | grep :6606

#maxadmin -uadmin  -pmariadb -P6606

MaxScale> list servers

Servers.

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

Server             | Address         | Port  | Connections | Status              

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

server1            | 192.168.4.12    |  3306 |           0 | Master, Running

server2            | 192.168.4.11    |  3306 |           0 | Slave, Running

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

MaxScale>quit

[root@localhost ~]#


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

在主从数据库服务器上客户端访问数据时使用的连接用户

mysql>grant all on  *.*  to student@"%" identified by 


"123456";


客户端访问

#which mysql

#mysql  -h192.168.4.10   -P4006 -ustudent   -p123456

mysql>select   ---->  11   从

mysql>insert   ---->  12   主


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

mysql性能调优

数据库服务器处理客户端的访问速度特别慢,可能是由哪些原因


造成的?


1 网络带宽不够

2 服务器配置太低

3提供数据库服务软件版本低

查看服务运行时的运行参数(变量)

mysql  -uroot  -p123123

mysql> show  variables  like  "%关键字%";

mysql> set  [GLOBAL]  变量名=值;


vim /etc/my.cnf

[mysqld]

变量=值

:wq



并发连接数

max_connections


mysql> show  global  status like "%max_used_conn%";


Max_used_connections/max_connections=0.85  * 100%


连接超时时间

mysql>show  variables  like   "%timeout%";

connect_timeout=10

wait_timeout=28800 


允许保存在缓存中被重用的线程数量

thread_cache_size=10


为所有线程缓存的打开的表的数量

table_open_cache =3



查询缓存参数设置?

mysql> show  variables like  "query_cache%";


query_cache_type=0/1/2


1  select * from t1;   <1m

2  select in_sql_cache * from t1;


query_cache_wlock_invalidate  off

对myisam 存储引擎有效。



pc1   select   name  from t1 where name="jim"; 

          name=jim


pc2  select   name  from t1 where name="jim";


pc3  update  t1  set  name="tom" where name="jim";


显示查询缓存统计信息

mysql>show global status like  "qcache%";



4程序员编程程序有问题(访问数据是编写的sql命令复杂导致处


理速度慢)

mysql服务支持4种日志文件:

错误日志     binlog   查询日志   慢查询日志

默认开启


查询日志:客户端连接服务器后执行的所有的sql命令。

general-log

general-log-file=目录/名


默认存储位置和名称

cat  /var/lib/mysql/主机名.log


慢查询日志 :客户端连接服务器后,记录超过指定时间(默认


10秒)显示查询结果的sql命令。

slow-query-log

slow-query-log-file=目录/名

long-query-time=3

默认存储位置和名称


mysql> select sleep(11);


cat   /var/lib/mysql/主机名-slow.log


# mysqldumpslow localhost-slow.log > /tmp/sql.err





4程序员编程程序有问题(访问数据是编写的sql命令复杂导致处理速度慢)


启用慢查询日志 ,记录超过指定时间显示查询结果的sql命令


5网络结构有问题