7DBA 半同步 初始化密码 MySQL读写分离 MySQL多实例 、 MySQL性能调优

MySQL主从同步常用配置选项:
]#vim /etc/my.cnf
[mysqld]
....
:wq
]#  systemctl  restart  mysqld
 
master选项
binlog_do_db=库名列表    //只允许同步的库                     
binlog_ignore_db=库名列表   //只不允许同步的库
                                 
slave  选项
slave_log_updates 级联复制 (主从从)
replicate_do_db=库名列表    //只同步的库                       
replicate_ignore_db=库名列表    //只不同步的库


 +++++++++++++++++++++++++++  
3.2主从同步复制模式
3.2主从同步复制模式
 
 
启用半同步复制模式
 show  varoables  like  'have_dynamic_loading';(查看变量,允不允许动态加载模块)
 
 
master:
 select plugin_name, plugin_status from information_schema.plugins where plugin_name like '%semi%';   (查看是否安装半同步插件)

 install plugin rpl_semi_sync_master soname 'semisync_master.so';  (安装主库半同步插件)

   mysql> set global rpl_semi_sync_master_enabled=1;   (启用主库半同步)
show  variables  like  'rpl_semi_sync_%_enabled';        (查询半同步状态) 
 
slave:
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; (安装从库半同步插件)
 


mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';  (查看半同步状态)     (变量名区分大小写)

  (这些都是暂时性的,要想永久就得写入配置文件)

 
mysql> set global rpl_semi_sync_slave_enabled=1;   (启用从库半同步)
mysql>show  variables  like  'rpl_semi_sync_%_enabled'  (查看半同步状态)
 
休息到 11:10
55
vim /etc/my.cnf
[mysqld]
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
:wq
]# scqld
mysql> show  variables  like  'rpl_semi_sync_%_enabled';   (查看半同步状态)
++++++++++++++++++++++++++++++
DBA2_DAY02
MySQL数据读写分离
MySQL多实例  
MySQL优化
 
]#mysql  -h主库ip  -uadmin  -p123456
                   51
mysql> select   * from t1;  查询数据 (读)
mysql>  insert into  t1 values(11); 存储数据(写)
 
 
MySQL数据读写分离: 把客户端查询数据库的请求和写入数据的请求,分别给不同的数据库服务器处理。
 
 
MySQL数据读写分离结构的目的: 减轻主库的并发访问压力,提高从库的硬件利用率。
 
部署MySQL数据读写分离:
手动分离:需要程序员协同完成,规定程序在存储数据时连接master数据库服务。查询数据时连接slave数据库服务。
 
部署实现数据读写分离服务实现: MySQL中间件
                                                 mycat    mysql-proxy   maxscale
 
 
配置数据读写分离服务:
1 部署MySQL主从同步结构(一主(51)一从(52))
mysql>change master to  master_host="192.168.4.51",master_user="repluser",master_password="123qqq...A",master_log_file="db51.000001",master_log_pos=441;
mysql> start  slave;
 
2测试主从同步配置
2.1  在主库给客户端授权存储数据时,连接服务器的用户密码密码
mysql>create  database  testdb;
mysql>create table  testdb.t1(id int);
mysql>grant  select ,insert  on   testdb.*  to   yaya99@"%"  identified by "123qqq...A";
 
2.2  在客户端50连接主库存储数据
mysql    -h192.168.4.51  -uyaya99  -p123qqq...A
mysql>  insert into  testdb.t1  values(888);
mysql>  select  * from  testdb.t1;
 
2.3  在从库本机查看 是否同步主库的设置
select  * from testdb.t1;
select user from mysql.user where user="yaya99";
select  * from  testdb.t1;
 
3 配置读写分离服务器56
装包
]# rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm
 
修改配置文件
]# cp /etc/maxscale.cnf   /etc/maxscale.cnf.bak    (防止被改坏,备份一份)
 
vim   /etc/maxscale.cnf

[maxscale]
 10 threads=auto    (线程数,auto自动定义的,根据cpu核数来创建)

18行
[server数字]    (定义服务器名)
[MySQL Monitor]
[Read-Write Service]
[MaxAdmin Service]
[Read-Write Listener]
[MaxAdmin Listener]

[server1]     定义数据库服务主机名
 type=server 

address=192.168.4.51 //master主机ip地址

port=3306  端口号

protocol=MYSQLBackend   (后端存储名)

扫描二维码关注公众号,回复: 2802883 查看本文章

[server2]

type=server

address=192.168.4.52从库

port=3306

protocol=MYSQLBackend

36行

[MYSQL  Monitor]    定义要监视的数据库节点

type=monitor

module=mysqlmon

servers=server1,server2    主从数据库的主机名

user=scalemon         用户名可以随便定义

password=密码        用户连接的密码

monitor_interval=10000

53-58行注释掉(不然只能写不能读)

64行

[Read-Write  Service]      定义读写分离的数据库节点

type=service

router=readwritesplit

servers=server1 ,server2  主从库的主机名

user=maxscale      用户名

password=密码

max_slave_connections=100%

注释掉86-90行(不然只能读不能写)

[MaxAdmin Service]
type=service
router=cli      

[Read-Write Listener]
 49 type=listener
 50 service=Read-Write Service
 51 protocol=MySQLClient
 52 port=4006

                                                               4006(读写分离的端口)

[MaxAdmin  Listener]
 99 type=listener
100 service=MaxAdmin Service
101 protocol=maxscaled
102 socket=default
103 port=4016  (默认没指定端口号,给他指定端口号,范围在1024-65536)注意不要用其他服务软件的端口,不然被占用)

root@host56 ~]# sed -i '/^#/d' /etc/maxscale.cnf   (删除配置文件#号开头的文件)
 
在数据库服务器上 根据配置文件的设置添加对应的授权用户  
mysql>grant replication slave, replication client on *.* to scalemon@'%'  identified by  '123qqq...A';  (创建监控用户)
 
mysql> grant select on mysql.* to maxscale@"%" identified by  '123qqq...A';(创建路由用户)

mysql>grant all on *.* to lisi@'%' identified by "123qqq...A"  (创建访问数据用户)
 
mysql> select  user from mysql.user  where  user  in ("scalemon","maxscale");  
 
在服务56主机上测试授权用户
]# which  mysql
]# yum  -y  install mariadb
]# mysql  -h192.168.4.51  -uscalemon  -p123qqq...A
]# mysql  -h192.168.4.52  -uscalemon  -p123qqq...A
]# mysql  -h192.168.4.51  -umaxscale   -p123qqq...A
]# mysql  -h192.168.4.52  -umaxscale   -p123qqq...A
 
启动服务
]# maxscale  -f /etc/maxscale.cnf
 
]# pkill  -9 maxscale   //停止服务
 
查看服务信息
[root@host56 ~]# ps -C maxscale
  PID TTY          TIME CMD
25957 ?        00:00:00 maxscale
 
[root@host56 ~]# netstat -utnlp | grep -i  maxscale
tcp6       0      0 :::4016                 :::*                    LISTEN      25957/maxscale
       
tcp6       0      0 :::4006                 :::*                    LISTEN      25957/maxscale       
 
 
 
 
4 测试读写分离服务器的配置
4.1 在56本机访问管理服务,查看监控信息
[root@host56 ~]# maxadmin  -uadmin  -pmariadb  -P4016
MaxScale>list  servers
Servers.
-------------------+-----------------+-------+-------------+--------------------
Server             | Address         | Port  | Connections | Status               
-------------------+-----------------+-------+-------------+--------------------
server1            | 192.168.4.51    |  3306 |           0 | Master, Running
server2            | 192.168.4.52    |  3306 |           0 | Slave, Running
-------------------+-----------------+-------+-------------+--------------------
 
 
4.2在客户端 连接56 主机,测试其读写分离配置
50]# mysql -h192.168.4.56 -P4006 -uyaya99 -p123qqq...A
mysql>  select  * from testdb.t1;   
mysql>  insert into  testdb.t1 values(999) ;

区分读写分离的方法:从库写入的数据不会同步,看到的是从库;主库写入的数据偏移量会变化。
 1,这种结构缺点是单点故障,读写分离依赖于主从同步,主库挂掉主从就不存在就不能实现读写分离,从库挂掉代理服务器就会让主库承担所有工作,增加主库的负担。
++++++++++++++++++++++++++++++++++++++++++++
 
MySQL多实例:在一台 物理主机上运行多个mysql数据库服务。
 
为什么要配置多实例服务:1,节约成本,提高硬件利用率。     缺点:一个硬件坏掉所有都坏掉,一般不用。
 
配置多实例服务192.168.4.50
  663  rpm  -qa  | grep  -i mysql
  664  systemctl  stop mysqld
  666  systemctl  disable mysqld
 
装包
]# tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
]# mv mysql-5.7.20-linux-glibc2.12-x86_64  /usr/local/mysql
 
]# vim  /etc/profile
export PATH=/usr/local/mysql/bin:$PATH           (把路径加入到PATH这个变量就可以tab,不用局限于绝对路径)
:wq
]# source  /etc/profile
]# echo  $PATH
 
创建主配置文件
]# mv /etc/my.cnf  /etc/my.cnf.bak
]# vim /etc/my.cnf  
[mysqld_multi]       (启用多实例)
mysqld = /usr/local/mysql/bin/mysqld_safe    (指定进程文件路径,多实例启动调用的文件)
mysqladmin = /usr/local/mysql/bin/mysqladmin  (指定管理命令路径)
user = root                 (指定进程用户)
 
[mysqld1]                (实例进程名称)
port           = 3307      (端口号)
datadir = /data3307      (数据库目录,,手动创建)
 socket  = /data3307/mysql.sock       (指定sock文件的路径和名称)
 pid-file =  /data3307/mysqld.pid         (进程pid号文件位置)
log-error = /data3307/mysqld.err          (错误日志)
 
[mysqld2]
port           = 3308      
datadir = /data3308     
 socket  = /data3308/mysql.sock       
 pid-file =  /data3308/mysqld.pid        
log-error = /data3308/mysqld.err  
:wq
 
]#mkdir   /data3307
]#mkdir   /data3308
 
初始化授权库
]# mysqld  --user=mysql  --basedir=/usr/local/mysql --datadir=/data3307   --initialize  
2018-07-21T09:55:03.752482Z 1 [Note] A temporary password is generated for root@localhost: lfy9t&_mondL

[root@host50 ~]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/data3308 --initialize    

 ]#mysqld_multi start /data3307

 ]mysal#mysqld_multi --user=root --password=密码  stop  实例编号(data3308  3307)
]# ls /data3307 

]# mysql -uroot -p初始密码 -s sock文件

】#alter user user() identified by "新密码"-s sock文件

【#mysqld_multi start /data3307

【#mysql  -uroot  -p新密码 

 
]#mysqld  --user=mysql  --basedir=/usr/local/mysql --datadir=/data3308   --initialize  
 
2018-07-21T09:57:54.500857Z 1 [Note] A tempoMySQL读写分离 MySQL多实例 、 MySQL性能调优rary password is generated for root@localhost: (:sKl_<?#3py
]# ls /data3308
 
启动服务
测试配置
 
 
 
缓存参数控制:

选项                               含义

key_buffer-size     用于MySAM引擎的关键索引缓存大小

sort_buffrr_size    为每个要排序的线程分配此大小的缓存空间
read_buffer_size   为顺序读取记录保留的缓存大小

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

table_open_cache为所有线程缓存的打开表的数量
 
 
 。并发及连接控制

max_connections  允许的最大并发连接数

connect_timeout    等待连接超时,默认10秒,仅登录时有效

wait_timeout          等待关闭连接的不活动超时的秒数,默认28800秒(8小时)
 
 
.关于查询的缓存

查看缓存的大小:show  variables  like  "query_cache%";
 查看当前的查询缓存统计:show  global  status like  "qcache%";
 
 故障分析及排除:连接使用的用户名或密码错误, mysql-proxy没有启动

解决办法:查看授权用户是否存在:select user,host from mysql.user

查看mysql-proxy是否运行:ps  aux  | grep  "mysql-proxy"

缓存参数控制

key_buffer_size=8M  (当key_reads /key_read_requests较低时可适当加大此缓存值)

show global status like "key_read%";

show variables like "key_buffer_size";

缓存参数控制2:

sort_buffer_size=256k(增大此值可提高order和group的速度)

show variables like "sort_buffer_size";

缓存参数控制3:

查看表记录读取缓存(此缓存影响sql查询的响应速度)

show variables like "read_%_size";

缓存参数控制4:

查看可重用线程数:show  variables  like "thread_%_size";

查看当前的线程重用状态:show  global status like "threads_%";

缓存参数控制5:

查看已打开,打开过多少个表:show global status like "open%tables";

查看可缓存多少个打开的表:show variables like "table_open_cache";    (理想比例小于等于95)

并发及连接控制:

查看当前已使用的连接数:flush   status;

show  global   status   like    "max_used_connections";

查看默认的最大连接数:show  variables   like  "max_connections";

调优思路总结:

手段                                                       具体操作

升级硬件:     cpu  内存,硬盘
加大网络带宽:付费加大带宽

调整mysql服务运行参数:并发连接数,连接超时时间,重复使用线程数。。。

调整与查询相关的参数:查询缓存,索引缓存。。。

启用慢查询日志:slow-query-log

网络架构不合理:调整网络架构

mysql日志类型

常用日志种类及选项:

类型                                            用途                                          配置

错误日志:   记录启动/运行/停止过程的错误消息                  log-error[=name]

查询日志  :  记录客户端连接和查询操作                            general-log 

                                                                                      general-log-file=

慢查询日志: 记录耗时较长或不使用索引的查询操作:  slow-query-log   

                                                                               slow-query-log-file=

                                                                                 long-query-time=

优化sql查询:

。记录慢查询

选项                                                 含义

slow-query-log                       启用慢查询

slow-query-log-file            指定慢查询日志文件

long-query-time               超过时间(默认10秒)

log-queries-not-using-indexes    未使用索引的查询

vim   /etc/my.cnf

[mysqld]

slow_query_log=1

slow_query_log_file=mysql-slow.log

long_query_time=5

log_queries_not_using_indexes=1

service    mysql   restart  

优化sql查询2:

查看慢查询日志:使用mysqldumpslow工具

mysql>mysqldumslow   /var/lib/mysql/mysql-slow.log

猜你喜欢

转载自blog.csdn.net/xixi1067087210/article/details/81166483
今日推荐