一、MySQL 数据读写分离:库乎端访问数据的查询请求和写请求分别给不同的数据服务器处理
查询 select A数据库服务器 slave
写 insert update delete B数据库服务器 master
读写分离的原理
- 多台MySQL 服务器
-分别提供读、写服务,均衡流量
-通过主从复制保持数据一致性 - 由MySQL 代理面向客户端
-收到SQL写请求时,交给服务器A处理
-收到SQL读请求时,交给服务器B处理
-具体区分策略由服务设置
为什么要数据读写分离?
减轻单台数据库服务器的并发访压力
提高机器硬件的利用率
如何实现数据读写分离
1、通过程序实现(让程序员写代码实现)
2、通过安装软件提供的服务实现(中间件)
Mycat mysql-proxy Maxscale …
配置数据读写分离
client
中间件
mysql-server
配置步骤:
1、部署mysql一主一从同步结构
1.1 配置主服务器51(启用binlog 日志 用户授权 查看binlog日志信息)
[root@51 ~]# vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=master51
[root@51 ~]# systemctl restart mysqld
[root@51 ~]# mysql -uroot -p123456
mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";
mysql> show master status;
1.2 配置从服务器52(指定server_id 指定主服务器信息 启动slave 查看程序信息)
[root@52 ~]# vim /etc/my.cnf
[mysqld]
server_id=52
[root@52 ~]# systemctl restart mysqld
[root@52 ~]# mysql -uroot -p"Taren1.com"
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123qqq...A",master_log_file="master51.000005",master_log_pos=441;
mysql> start slave;
mysql> show slave status\G;
2、配置数据读写分离服务器57
2.1 拷贝软件包 到 57 主机
[root@room9pc01 ~]# scp ‘/root/桌面/aaaaa/数据库管理/软件包/soft/mysql/maxscale-2.1.2-1.rhel.7.x86_64.rpm’ [email protected]:/root
2.2 安装软件
[root@57 ~]# yum -y install maxscale-2.1.2-1.rhel.7.x86_64.rpm
2.3修改配置文件
[root@57 ~]# vim /etc/maxscale.cnf
9 [maxscale]
10 threads=1 //定义线程个数
18 [server1] //定义数据库服务器主机名
19 type=server
20 address=192.168.4.51 //master主机ip地址
21 port=3306
22 protocol=MySQLBackend
23
24 [server2] //定义数据库服务器
25 type=server
26 address=192.168.4.52 //slave主机ip地址
27 port=3306
28 protocol=MySQLBackend
35 [MySQL Monitor] //定义要监视的数据库节点
36 type=monitor
37 module=mysqlmon
38 servers=server1,server2 //主从数据库的主机名
39 user=scalemon //用户名
40 passwd=123qqq...A //密码
41 monitor_interval=10000
52 #[Read-Only Service]
53 #type=service
54 #router=readconnroute
55 #servers=server1
56 #user=myuser
57 #passwd=mypwd
58 #router_options=slave
63 [Read-Write Service] //路由用户(定义读写分离的数据库节点)
64 type=service
65 router=readwritesplit
66 servers=server1,server2 //主、从数据库的主机名
67 user=scaleroute //用户名
68 passwd=123qqq...A //密码
69 max_slave_connections=100%
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
102 port=4016
2.4 用户授权(根据配置文件的设置在2台数据库服务器上添加对应的用户)
监控用户
mysql> grant replication slave,replication client on *.* to scalemon@"%" identified by "123qqq...A";
路由用户
mysql> grant select on mysql.* to scaleroute@"%" identified by "123qqq...A";
2.5 启动服务(192.168.4.57)
2.51 验证授权用户
[root@57 ~]# mysql -h192.168.4.51 -uscalemon -p123qqq...A
[root@57 ~]# mysql -h192.168.4.51 -uscaleroute -p123qqq...A
2.52 启动服务
[root@57 ~]# maxscale -f /etc/maxscale.cnf 启动服务
[root@57 ~]# ps -C maxscale
[root@57 ~]# ss -ntulp | grep maxscale
[root@57 ~]# killall -9 maxscale //关闭服务
3测试配置
3.1 查看管理信息
[root@57 ~]# 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
-------------------+-----------------+-------+-------------+--------------------
3.2 测试数据分离读写(客户端连接192.168.4.57访问数据)
3.2.1 在主数据库服务器上添加访问数据的用户
[root@51 ~]# mysql -uroot -p123456
mysql> create database db8;
mysql> create table db8.t1(id int);
mysql> grant select,insert on db8.* to yaya@"%" identified by "123qqq...A";
3.2.2 客户端50,连接57主机访问数据
[root@51 ~]# mysql -uroot -p123456
mysql> insert into db8.t1 values(11111);
[root@52 ~]# mysql -uroot -p"Taren1.com"
mysql> insert into db8.t1 values(222222);
[root@50 ~]# mysql -h192.168.4.57 -P4006 -uyaya -p123qqq...A
mysql> select * from db8.t1;
mysql> insert into db8.t1 values(11111);
mysql> select * from db8.t1;
二、MySQL实例
1、什么是多实例?在一台服务器上运行多个数据库服务
2、为什么要使用多实例?节约运维成本,提高硬件使用率
3、 配置多实例
3.1 安装软件
[root@50 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql
[root@50 ~]# cd /usr/local/mysql/
[root@50 mysql]# ls bin
3.2 修改服务的主配置文件
[root@50 mysql]# systemctl stop mysqld
[root@50 mysql]# systemctl disable mysqld
Removed symlink /etc/systemd/system/multi-user.target.wants/mysqld.service.
[root@50 mysql]# mv /etc/my.cnf /root/
[root@50 mysql]# vim /etc/my.cnf
[mysqld_multi] //启用多实例
mysqld = /usr/local/mysql/bin/mysqld_safe //指定进程文件路径
mysqladmin = /usr/local/mysql/bin/mysqladmin //指定管理命令路径
user = root //指定进程用户
[mysqld1] /实例进程名称
datadir = /dir1 //数据库目录
port = 3307 //端口号
log_error = /dir/mysql3307.log //错误日志文件
pid-file = /dir1/mysql3307.pid //进程 pid 文件位置
socket = /dir1/mysql3307.sock //指定sock文件的路径和名称
[mysqld2]
datadir = /dir2
port = 3308
log_error = /dir/mysql3308.log
pid-file = /dir2/mysql3308.pid
socket = /dir2/mysql3308.sock
[root@50 ~]# mkdir /dir1
[root@50 ~]# mkdir /dir2
数据库目录
端口号
错误日志文件
pid 号文件
socket
3.3 启动服务
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi start 1
[root@50 mysql]# /usr/local/mysql/bin/mysql -uroot -p’f:zfya1q5kBB’ -S /dir1/mysql3307.sock
mysql> alter user root@“localhost” identified by “123456”;
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi --user=root --password=123456 stop 1
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi start 2
[root@50 mysql]# /usr/local/mysql/bin/mysql -uroot -p’ok)I*1ft&H8<’ -S /dir2/mysql3308.sock
mysql> alter user root@“localhost” identified by “123456”;
[root@50 mysql]# /usr/local/mysql/bin/mysqld_multi --user=root --password=123456 stop 2
4、 验证配置
4.1 访问多实例服务,对数据作操作
三、MySQL性能调优
1 升级硬件 (cpu、内存、存储) 运维部
2 优化数据库服务运行参数
mysql> show variables; //显示当前所有变量
mysql> show variables like "%关键字%";
mysql> show variables like "%timeout%";
mysql> set globel 变量名=值;
mysql> set globel connect_timeout=5;
[root@50 ] vim /etc/my.cof
[mysqld]
变量名=值
mysql> show status;
mysql> show status like "%connect%";
mysql> show status like "Connections";
常用设置参数:
max_connections 允许的最大并发连接数
mysql> show status like "Max_used_connections";
最大并发连接/最大并发连接数 = 0.85 x 100% = 85%
并发及连接控制
Max_used_connections/max_connections=0.85
connect_timeout 等待连接超时,默认10秒,仅登录时有效
wait_timeout 等待关闭连接的不活动超时秒数,默认28800妙(8小时)
缓存参数控制
key_buffer_size 用于MyISAM引擎的关键索引缓存大小
sort_buffer_size 为每个要排序的线程分配此大小的缓存空间
read_buffer_size 为顺序读取表记录保留的缓存大小
thread_cache_size 允许保存在缓存中被重用的线程数量
table_open_cache 为所有线程缓存的打开的表的数量
3 让程序员优化访问数据的sql命令
优化服务查询缓存
数据服务处理查询请求的过程?
查看与缓存相关的变量
show variables like “query_cache%”;
4 网络带宽
5 优化服务架构(检查网络架构中是否有数据传输瓶颈)