sql多实例,复制,读写分离结构
mysql多实例管理
多实例:基于一套mysql应用,生成多个数据目录
意义:可有效利用服务器资源,为充分利用剩余资源提供更多服务
做法:一台Linux上同时运行多个mysql,也就是多个实例(区别不同端口 例如3306、3307、3308),进行资源的逻辑隔离
查看已使用的端口:netstat -a
查看mysql占用端口的语句:netstat -tunlp|grep mysql
原因:
eg.一个网站需要多个数据库
eg.一个虚拟机开不同数据库,但一个公司开不同数据库,需要很多物理机(为了避免数据的紊乱,一个物理机一个数据库,成本很高)
eg.你只有一台电脑,但需要同时展示单车管理系统与图书管理系统
多实例中不同实例的区别
不同数据库的特点:在同一Linux机器下不同文件夹与目录下
具体呈现的区别是:不同的端口;不同的数据目录,不同的配置文件;不同的mysql进程,不同的pid
一个数据库即为一个卧室,为该数据库单独活动的场所,而厨房,客厅是公用的,当启动相应的数据库时,数据库会调用相应的软硬件去实现操作,也就是使用厨房和客厅。当多个实例,多个数据库共同启动时,对于同一个Linux来说,会发生 抢占与等待。(这一句话也是弊端)
(厨房与客厅对应一套服务器中的软件资源CentOS操作系统,硬件资源CPU mem disk)
数据库的主从性质,读写分离需求
多实例读写架构图
逻辑顺序:客户端发送请求给负载均衡,再发送给应用服务器(eg.Java、python、PHP),再进行请求分析
该图中数据库可用功能:
主库:(可读)可写
从库(start时从主库copy一份):数据读取
部署MySQL多实例
基于一个musql应用,初始化三次,生成三个独立的mysql数据目录,即为三个mysql独立的实例
部署多实例的几种方式:
步骤(仅为Linux系统下二进制安装mysql):
1.wget命令下载
2.安装所需要基础依赖
3.环境的清除(先前下载过mysql):清空PATH有关的mysql;停止当前Linux的mysql(如果发现mysql端口);创建mysql用户(有则无需重新下载)
mkdir -p /my_mysql/{3306,3307}
4.解压缩二进制软件包
5.查看mysql安装包信息
mysql多实例部署
每一个实例都有单独的
1.配置文件
2.启动脚本
3.数据目录
配置文件代码如下
实例1 3306的配置文件
cat /my_mysql/3306/my.cnf
[client]
[mysqld]
port=3306
socket=/my_mysql/3306/mysql.sock
#二进制mysql的目录
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/
#mysqld初始化数据往哪里写入
datadir=/my_mysql/3306/data
#实例名字为3306,日志名字为mysql_bin
log-bin=/my_mysql/3306/mysql-bin
#对当前数据库的唯一标识id
server-id=1
[mysqld_safe]
#错误日志书写位置
log-error=/data/3306/mysql_3306_error.log
pid-file=/data/3306/mysqld_3306.pid
#实例2 3307的配置文件
cat /my_mysql/3307/my.cnf
[client]
[mysqld]
port=3307
socket=/my_mydql/3307/mysql.sock
#二进制mysql的目录
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/
#mysqld初始化数据往哪里写入
datadir=/my_mysql/3307/data
#实例名字为3307,日志名字为mysql_bin
log-bin=/my_mysql/3307/mysql-bin
#对当前数据库的唯一标识id
server-id=2
[mysqld_safe]
#错误日志书写位置
log-error=/data/3307/mysql_3307_error.log
pid-file=/data/3307/mysqld_3307.pid
MySQL综合知识
1.设置mysql多实例开机自启(Linux)
cat /etc/rc.local
echo "/my_mysql/3306/mysql_3306 start" >> /etc/rc.local
echo "/my_mysql/3307/mysql_3307 start" >> /etc/rc.local
2.多种登录方式
- mysql客服端命令 :p+port
(基于端口区分的多实例登录方法)
格式为 mysql -u用户名 -p[密码] -h服务端mysql的地址 -P端口
注意点(-P端口 处为大写P)
该方法好处:
1.可以用于登录本地mysql(mysql客户端和服务端一起的情况下)
2.可用于远程登录mysql服务端
mysql -uroot -p -h127.0.0.1 -P3306
- 通过mysql.sock套接字文件登录(通俗讲就是根目录找到文件夹的方式)
可以进行该方法登录的条件:
1.mysql进制存在
2.sock文件存在
3.pid文件存在
mysql多实例密码
mysqladmin -uroot -S /my_mysql/3306/mysql.sock password
如何远程登录mysql
注意必须在服务端找,不是在客户端上找
mysql -uroot -p -h深圳某家公司数据库服务器ip -P3306
#查询ip,Linu系统可用
ip a
可能出现问题解决方案:
- 被主机拒绝连接(权限不够、需要授权)
- 想运维同学,也就是DBA要权限
主机授权SQL语句:
格式为
grant all privileges on . to root @ ‘网站.%’ identified by ‘密码’;
对应意思为
限制连接用户必须在这个 网址 凭借这个 密码 登录数据库 访问 所有数据库 的 所有数据表
grant all privileges on *.* to root @ '127.0.0.1.%' identified by 'root';
flush privileges;#对权限表进行刷新
之后在客户端机上远程登录就不会受到阻碍了
ps:当前趋势:目前云计算服务正在盛行