mysql体系结构服务组成连接管理多实例部署

Posted givenchy_yzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql体系结构服务组成连接管理多实例部署相关的知识,希望对你有一定的参考价值。

一、mysql体系结构管理

1.客户端与服务器模型

1)mysql是一个典型的C/S服务结构
1.mysql自带的客户端程序(/service/mysql/bin)
mysql
mysqladmin
mysqldump

2.mysqld一个二进制程序,后台的守护进程
单进程
多线程

2)MySQL的两种连接方式

1.TCP/IP的连接方式
2.套接字连接方式,socket连接

#查看连接方式
mysql> status;
--------------
Connection:		Localhost via UNIX socket

3.举例:
	3.1.TCP/IP连接
	mysql -uroot -p -h127.0.0.1
	mysql -uroot -p -h127.0.0.1 -S /tmp/mysql.sock
	
	3.2.socket连接
	mysql -uroot -p -hlocalhost
	mysql -uroot -p123(默认连接方式,socket)
	
4.注意:
	4.1.因为使用TCP/IP连接,需要建立三次握手
	4.2.不一定-h都是tcp,-hlocalhost是socket连接

二、mysql服务构成

1.实例

1.MySQL的后台进程+线程+预分配的内存结构。
2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用。
1.什么是实例?
一个进程 + 多个线程 + 预分配内存空间
2.多实例?
多个进程 + 多个线程 + 多个预分配的内存空间

2.mysqld服务器程序构成

mysqld是一个守护进程但是本身不能自主启动
[root@db04 ~]# /etc/init.d/mysqld start

1)连接层
1.验证用户的合法性
2.提供两种连接方式(TCP/IP socket)
3.建立一个与SQL层交互的线程

2)sql层

1.接收连接层传来的SQL语句
2.验证语法
3.验证语义(DML,DDL,DCL,DQL) 检查你输入的SQL语句是 select insert update delete... grant
4.解析器:解析你的SQL语句,生成多种执行计划
5.优化器:接收解析器传来的多种执行计划,选择最优的一种
6.执行器:将优化器选择出的最优的SQL,执行
	6.1 建立一个与存储引擎层 交互的线程
	6.2 将执行语句交给存储引擎层,取数据 接收存储引擎层,结构化成表的数据结果
7.如果你的前端有缓存,写缓存
8.记录日志(binlog)

3)存储引擎层
1.接收到SQL层传来的SQL语句
2.与磁盘交互,取数据,结构化成表的形式,返回给SQL层
3.建立一个与SQL层交互的线程

三、mysql相关命令

1.不同方式启动数据库读取文件的流程

/etc/init.d/mysqld start ------> mysql.server ------> mysqld_safe ------> mysqld

systemctl start mysql ------> mysqld_safe ------> mysqld----->mysqld_safe --defaults-file=/etc/my.cnf ------> mysqld_safe ------> mysqld

2.停止数据库

/etc/init.d/mysqld stop
systemctl stop mysqld
mysqladmin -uroot -p123 shutdown

#不建议使用
kill -9 pid
killall mysqld
pkill mysqld

#使用kill可能会出现问题:
1.如果在业务繁忙的情况下,数据库不会释放pid和sock文件
2.号称可以达到和Oracle一样的安全性,但是并不能100%达到
3.在业务繁忙的情况下,丢数据(补救措施,高可用)

3、设置密码

1.mysqladmin -uroot -p123 password ‘1’
2.update mysql.user set password=password(‘123’) where user=‘root’ and host=‘localhost’;
3.set password=password(‘1’); 修改当前用户的密码
4.grant all on . to ‘root’@‘localhost’ identified by ‘123’;

四、mysql连接管理

1、mysql自带的连接命令 mysql

mysql
#常见的特定于客户机的连接选项:
-u: 指定用户 mysql -uroot
-p: 指定密码 mysql -uroot -p567
-h: 指定主机域 mysql -uroot -p567 -h127.0.0.1
-P: 指定端口 mysql -uroot -p567 -h127.0.0.1 -P3307
-S: 指定socket文件 mysql -uroot -p567 -S /tmp/mysql.sock
-e: 指定SQL语句(库外执行SQL语句) mysql -uroot -p567 -e “show databases;”
#–protocol: 指定连接方式 mysql --protocol=TCP --protocol=socket

2、第三方的连接工具

1.sqlyog
2.navicat
#注意:数据库是没有外网的,想连接可以使用通道
3.heidisql
4.应用程序连接MySQL
#注意:需要加载对应语言程序的API

五、mysql多实例部署

nginx多实例就是多个配置文件
mysql多实例:
1.多个数据目录
2.多个端口
3.多个socket文件
4.多个日志文件

1.创建多个数据目录

[root@db01 ~]# mkdir /data/{3307,3308,3309} -p

2.准备多个配置文件

[root@db01 data]# vim /data/3307/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3307/data
port=3307
socket=/data/3307/mysql.sock
log-error=/data/3307/data/mysql.err
log-bin=/data/3307/data/mysql-bin
server_id=7

-------------------------------------------
	
[root@db01 data]# vim /data/3308/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
log-error=/data/3308/data/mysql.err
log-bin=/data/3308/data/mysql-bin
server_id=8

--------------------------------------------

[root@db01 data]# vim /data/3309/my.cnf 
[mysqld]
basedir=/service/mysql
datadir=/data/3309/data
port=3309
socket=/data/3309/mysql.sock
log-error=/data/3309/data/mysql.err
log-bin=/data/3309/data/mysql-bin
server_id=9

3.初始化多套数据目录

[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3307/data

[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3308/data

[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3309/data

#使用tree可以查看
[root@db01 scripts]# tree -L 3 /data

4.授权目录

[root@db01 scripts]# chown -R mysql.mysql /data

5.启动数据库

[root@db01 scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &

6.检查启动

[root@db01 scripts]# netstat -lntup|grep 330
tcp6 0 0 :::3307 ::😗 LISTEN 25550/mysqld
tcp6 0 0 :::3308 ::😗 LISTEN 25722/mysqld
tcp6 0 0 :::3309 ::😗 LISTEN 25894/mysqld

7.多实例设置密码

[root@db01 scripts]# mysqladmin -uroot -S /data/3307/mysql.sock password ‘3307’
[root@db01 scripts]# mysqladmin -uroot -S /data/3308/mysql.sock password ‘3308’
[root@db01 scripts]# mysqladmin -uroot -S /data/3309/mysql.sock password ‘3309’

8.多实例验证

[root@db01 scripts]# mysql -uroot -p3307 -S /data/3307/mysql.sock -e "show variables like 'server_id';"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 7     |
+---------------+-------+
	
[root@db01 scripts]# mysql -uroot -p3308 -S /data/3308/mysql.sock -e "show variables like 'server_id';"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 8     |
+---------------+-------+
	
[root@db01 scripts]# mysql -uroot -p3309 -S /data/3309/mysql.sock -e "show variables like 'server_id';"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 9     |
+---------------+-------+

9.连接多实例小技巧

[root@db01 scripts]# vim /usr/bin/mysql3309
mysql -uroot -p3309 -S /data/3309/mysql.sock
[root@db01 scripts]# vim /usr/bin/mysql3308
mysql -uroot -p3308 -S /data/3308/mysql.sock
[root@db01 scripts]# vim /usr/bin/mysql3307
mysql -uroot -p3307 -S /data/3307/mysql.sock

[root@db01 scripts]# chmod +x /usr/bin/mysql*

以上是关于mysql体系结构服务组成连接管理多实例部署的主要内容,如果未能解决你的问题,请参考以下文章

MySQL体系结构

MySQL多实例管理

mysql体系结构

MySQL2种多实例部署方式总结

MYSQL部署配置管理5.6版本

MySQL存储引擎与体系结构