MySql数据读写分离、配置多实例、mysql优化

准备mysql 一主一从 主从同步结构

数据读写分离

把客户端查询数据的请求和写入数据的请求分发给不同的数据库服务器处理
    select        insert/update/delete
实现数据读写分离的方法
人肉分离:执行select sql命令时 访问数据库服务器 192.168.1.54
       执行insert sql命令时 访问数据库服务器 192.168.4.52
select: mysql -h192.168.4.54 -u用户名 -p密码
insert: mysql -h192.168.4.52 -u用户名 -p密码
        代理服务(接收客户端访问数据库服务器的请求)

通过第三方软件提供的服务 实现数据读写分离
    mysql中间件   mysql-proxy  mycat  maxscale
            client

select/insert: mysql -hproxy_ip -u用户名 -p密码
           mysql> select
           mysql> insert




mysql> grant replication slave on *.* to slaveuser@"%" identified by "123453";

mysql> show slave status;



修改配置文件
[root@host53 ~]# vim /etc/maxscale.cnf

[maxscale]
threads=1

[server1]                     // 定义数据库服务器主机名
type=server
address=192.168.4.52             //master 主机 ip 地址
port=3306
protocol=MySQLBackend
[server2]                     // 定义数据库服务器
type=server
address=192.168.4.54             //slave 主机 ip 地址
port=3306
protocol=MySQLBackend

[MySQL Monitor]                 // 定义要监视的数据库服务器
type=monitor
module=mysqlmon
servers=server1,server2             // 定义的主、从数据库服务器主机名
user=scalemon // 用户名
passwd=123453 // 密码
monitor_interval=10000

#[Read-Only Service]            //定义只读数据库服务器
#type=service
#router=readconnroute
#servers=server1
#user=myuser
#passwd=mypwd
#router_options=slave

[Read-Write Service]             // 定义实现读写分离的数据库服务器
type=service
router=readwritesplit
servers=server1,server2             // 定义的主、从数据库服务器主机名
user=maxscale // 用户名
passwd=123453// 密码
max_slave_connections=100%

 75 [MaxAdmin Service]            //定义管理服务
 76 type=service
 77 router=cli

 85 [Read-Only Listener]            //定义只读服务端口号
 86 type=listener
 87 service=Read-Only Service
 88 protocol=MySQLClient
 89 port=4008

 97 [MaxAdmin Listener]
 98 type=listener
 99 service=MaxAdmin Service
100 protocol=maxscaled
101 socket=default
    port=4019


[root@host53 mysql]# sed -i '/#/d' /etc/maxscale.cnf    删除文件中的所有带#的行


根据配置文件做相应的设置在数据库服务器上添加用户scalemon和maxscale


创建监控用户scalemon:
监控数据库服务器时,连接数据库服务器的用户
mysql> grant replication  slave, replication client   on *.* to scalemon@'%' identified by   "123453";


创建路由用户maxscale:
验证 访问数据时,连接数据库服务器使用的用户,是否在数据库服务器上存在的,连接用户
mysql> grant select  on  mysql.* to maxscale@'%'  identified by "123453";


查看授权用户
mysql> select user,host from mysql.user where user in ("scalemon","maxscale");
+----------+------+
| user     | host |
+----------+------+
| maxscale | %    |
| scalemon | %    |
+----------+------+

启动服务
[root@host53 ~]# maxscale  -f  /etc/maxscale.cnf


查看服务进程和端口

查看端口
[root@host53 ~]# netstat -utnlp  | grep :4006
tcp6       0      0 :::4006                 :::*                    LISTEN      29688/maxscale      

[root@host53 ~]#

[root@host53 ~]# netstat -utnlp  | grep :4019
tcp6       0      0 :::4019                 :::*                    LISTEN      29688/maxscale      
[root@host53 ~]#

查看进程
[root@host53 ~]# ps -C maxscale
  PID TTY          TIME CMD
29688 ?        00:00:00 maxscale
[root@host53 ~]#


停止服务
[root@host53 ~]# ps -C maxscale
  PID TTY          TIME CMD
29688 ?        00:00:00 maxscale
[root@host53 ~]# kill  -9  29688
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# kill  -9  29688
-bash: kill: (29688) - 进程不存在

2.2.3 测试配置
A 在本机访问管理管端口查看监控状态

[root@host53 ~]# maxadmin  -P4019  -uadmin  -pmariadb
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
-------------------+-----------------+-------+-------------+--------------------
MaxScale> exit
[root@host53 ~]#

b 客户端访问数据读写分离服务器
]#which  mysql
]# mysql -h192.168.4.53 -P4006 -uwebuser -p123453
mysql>  select  @@hostname;
mysql>  执行插入或查询 ( 在51 和 52 本机查看记录)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.2 配置mysql多实例
要求:在主机192.168.4.53配置mysql多实例:
运行2个数据库服务  

第1个数据库服务  数据库目录  /dataone
                          服务端口号   3307
                          sock文件    /dataone/mysqld.sock
                          日志文件    /dataone/mysqld.log

第2个数据库服务
                          数据库目录 /datatow
                          服务端口号 3308
                          sock文件  /datatwo/mysqld.sock
                          日志文件   /datatwo/mysqld.log
1 环境准备
netstat  -utnalp   | grep  :3307
netstat  -utnalp   | grep  :3308

2 安装提供多实例服务的, mysql数据库服务软件
[root@host53 ~]# mv  mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@host53 ~]#
[root@host53 ~]# ls /usr/local/mysql/
bin  COPYING  docs  include  lib  man  README  share  support-files
[root@host53 ~]# ls /usr/local/mysql/bin/
innochecksum       mysqladmin                  mysqld_multi      mysqlpump                  mysqlxtest
lz4_decompress     mysqlbinlog                 mysqld_safe       mysql_secure_installation  perror
myisamchk          mysqlcheck                  mysqldump         mysqlshow                  replace
myisam_ftdump      mysql_client_test_embedded  mysqldumpslow     mysqlslap                  resolveip
myisamlog          mysql_config                mysql_embedded    mysql_ssl_rsa_setup        

resolve_stack_dump
myisampack         mysql_config_editor         mysqlimport       mysqltest_embedded         

zlib_decompress
my_print_defaults  mysqld                      mysql_install_db  mysql_tzinfo_to_sql
mysql              mysqld-debug                mysql_plugin      mysql_upgrade
[root@host53 ~]#
[root@host53 ~]# echo  "export  PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@host53 ~]# source /etc/profile
[root@host53 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin



配置多实例

装包
tar -zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

移动改名
rm -rf /var/lib/mysql
mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql


[root@host53 ~]# ls /usr/local/mysql/
bin  COPYING  docs  include  lib  man  README  share  support-files
[root@host53 ~]# ls /usr/local/mysql/bin/
innochecksum       mysqladmin                  mysqld_multi      mysqlpump                  mysqlxtest
lz4_decompress     mysqlbinlog                 mysqld_safe       mysql_secure_installation  perror
myisamchk          mysqlcheck                  mysqldump         mysqlshow                  replace
myisam_ftdump      mysql_client_test_embedded  mysqldumpslow     mysqlslap                  resolveip
myisamlog          mysql_config                mysql_embedded    mysql_ssl_rsa_setup        

resolve_stack_dump
myisampack         mysql_config_editor         mysqlimport       mysqltest_embedded         

zlib_decompress
my_print_defaults  mysqld                      mysql_install_db  mysql_tzinfo_to_sql
mysql              mysqld-debug                mysql_plugin      mysql_upgrade

[root@host53 ~]# echo  "export  PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
[root@host53 ~]# source /etc/profile
[root@host53 ~]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin


编辑配置文件  
]# rm  -rf  /etc/my.cnf
]#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=/dataone

socket=/dataone/mysqld.sock
log-error=/dataone/mysqld.log

pid-file=/dataone/mysqld.pid

[mysqld2]

port=3308
datadir=/datatwo

socket=/datatwo/mysqld.sock
log-error=/datatwo/mysqld.log

pid-file=/datatwo/mysqld.pid
:wq
4 根据配置文件的设置,做相应的配置
4.1创建数据库目录
4.2创建进程运行的所有者和组 mysql
[root@host53 ~]# mkdir -p /dataone
[root@host53 ~]# mkdir -p /datatwo
[root@host53 ~]# useradd  mysql
c[root@host53 ~]# chown  mysql:mysql  /data*

4.3 初始化授权库
]#mysqld  --user=mysql  --basedir=/usr/local/mysql   --datadir=/dataone   --initialize


2018-05-05T08:47:48.992696Z 1 [Note] A temporary password is generated for root@localhost:

bXk.5j!pjto#

[root@host53 ~]# ls  /dataone/
auto.cnf  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema  sys


]#mysqld  --user=mysql  --basedir=/usr/local/mysql  --datadir=/datatwo  --initialize

2018-05-05T08:50:09.429934Z 1 [Note] A temporary password is generated for root@localhost:

bKsaf+xzk0V3

[root@host53 ~]# ls /datatwo/
auto.cnf  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema  sys
[root@host53 ~]#

5 启动多实例服务
[root@host53 ~]# mysqld_multi   start   1
[root@host53 ~]# mysqld_multi   start   2

[root@host53 ~]# netstat -utnlp  | grep :3308
tcp6       0      0 :::3308                 :::*                    LISTEN      1153/mysqld     
    
[root@host53 ~]# netstat -utnlp  | grep :3307
tcp6       0      0 :::3307                 :::*                    LISTEN      927/mysqld          
[root@host53 ~]#

6 访问多实例服务
连接实例服务1
[root@host53 ~]#mysql -uroot   -p'bXk.5j!pjto#'  -S    /dataone/mysqld.sock

mysql> ALTER USER user() identified   by   "123453";
mysql> quit;

]# mysql  -uroot  -p123453   -S  /dataone/mysqld.sock
mysql> show databases;
+--------------------+
| Database                    |
+--------------------+
| information_schema |
| mysql                          |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql>


连接实例服务2
[root@host53 ~]#mysql -uroot   -p'bKsaf+xzk0V3'  -S    /datatwo/mysqld.sock
mysql> alter user  user() identified by "123453";
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> quit
Bye
[root@host53 ~]# mysql  -uroot -p123453   -S  /datatwo/mysqld.sock



停止启动的实例服务
]# mysqld_multi  --user=root  --password=密码  stop  实例编号

[root@host53 ~]# netstat -utnlp | grep :3307
tcp6       0      0 :::3307                 :::*                    LISTEN      927/mysqld          
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6       0      0 :::3308                 :::*                    LISTEN      1153/mysqld         
[root@host53 ~]#
[root@host53 ~]# mysqld_multi  --user=root  --password=123453 stop 1
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3307
[root@host53 ~]#
[root@host53 ~]# netstat -utnlp | grep :3308
tcp6       0      0 :::3308                 :::*                    LISTEN      1153/mysqld         
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]#
[root@host53 ~]# mysqld_multi  --user=root  --password=123453 stop 2
[root@host53 ~]# netstat -utnlp | grep :3308
[root@host53 ~]# mysql -uroot   -p123453   -S    /datatwo/mysqld.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/datatwo/mysqld.sock' (2)
[root@host53 ~]#

+++++++++++++++++++++++++++++++++++++++++++++++
三、mysql优化

程序员编写的对数据访问的sql命令复杂,导致数据库服务处理的,启用mysql服务的慢查询日志,记录超过指定时间查询结果的sql命令


错误日志    记录启动 / 运行 / 停止过程中的错误消息    log-error[=name]
查询日志    记录客户端连接和查询操作            general-log        general-log-file=
慢查询日志    记录耗时较长或不使用索引的查询操作        slow-query-log    slow-query-log-file=    long-query-time=


slow-query-log                启用慢查询
slow-query-log-file            指定慢查询日志文件
long-query-time                超过指定秒数(默认 10秒)的查询才被记录
log-queries-not-using-indexes        记录未使用索引的查询


启用慢查询日志
vim /etc/my.cnf
[mysqld]
slow-query-loglong-query-time=2
log-queries-not-using-indexes
:wq
]# systemctl restart mysqld

]# mysql  -uroot -p123453
mysql> select sleep(3);
mysql> select sleep(5);


查看日志文件内容
]#  cat   /var/lib/mysql/主机名-slow.log

统计日志文件记录信息
~]# mysqldumpslow /var/lib/mysql/db55-slow.log  > /tmp/sql.txt


启用查询日志
vim /etc/my.cnf
[mysqld]
general-log
]#  systemctl  restart  mysqld

]# cat  /var/lib/mysql/db55.log


mysql> show variables like "query_cache%";            查询缓存

+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| query_cache_limit            | 1048576 |
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 1048576 |
| query_cache_type             | OFF     |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+


query_cache_wlock_invalidate | OFF     查询缓存结果有效 对myisam存储引擎的表有效,控制脏读


mysql> show global status like "qcache%";
+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      | 1       |
| Qcache_free_memory      | 1031832 |
| Qcache_hits             | 0       |        记录在查询缓存里查找的数据的次数
| Qcache_inserts          | 0       |        记录数据库服务器接受查询请求的次数
| Qcache_lowmem_prunes    | 0       |        记录清除查询缓存空间里数据的次数
| Qcache_not_cached       | 1       |
| Qcache_queries_in_cache | 0       |
| Qcache_total_blocks     | 1       |
+-------------------------+---------+




猜你喜欢

转载自blog.csdn.net/qq_41916828/article/details/80926716