第1章 体系结构
1.1 C/S(客户端/服务端)模型介绍
基于mysql是C/S模型所以有2中连接方式:
第一种: TCP/IP方式(远程、本地)不支持root用户登录
mysql -uyfc -p123 -h 10.0.1.51 -P 3306
第二种:socket方式(仅本地)
mysql -uroot -p123 -S /tmp/mysql.sock
1.2 实例介绍
实例=mysqld后台守护进程+master thread+干活的Thread+预分配的内存
形象比喻:
公司=老板+经理+员工+办公室
第2章 mysqld程序运行原理
2.1 一条SQL语句的执行过程
1.1 连接层
1. 提供TCP/IP连接协议或者socket连接协议
2. 检查用户名、密码、端口号
3. 生成一个专用的线程(接收SQL,返回结果)
4. 把语句交给下一层
1.2 SQL层
1. 检查SQL语法和SQL_MODE
2. 验证权限
3. 验证语义
4. 解析器对语句进行解析,生成多种执行计划
5. 优化器基于执行代价(CPU、内存、IO的消耗),选择一种它认为最优的执行计划
6. 执行器根据优化器选择的执行计划,执行语句。得到获取数据的方法
7. 提供缓存查询,默认没有开启(一般用redis来代替)
8. 提供日志记录
1.3 存储引擎层
真正和磁盘打交道的一层
1.根据SQL的结果,去磁盘上拿到数据
2.结构化成二维表,再由SQL层返回连接层
3.在由连接层的线程返回给用户
第3章 mysql逻辑结构和物理结构
3.1 逻辑结构
库
库名,库属性
表
表名,表属性,表内容,表结构
3.2 MySQL物理结构引入
宏观:
库------> 目录
表------>
MyISAM(存储引擎):
user.frm : 表结构
user.MYD : 表数据
user.MYI : 索引
InnoDB(存储引擎):
5.5.8默认引擎是InnoDB
time_zone.frm : 表结构
time_zone.ibd : 数据和索引
微观:
段 segment : 一个表(非分区表),就是一个段,相当于一个文件系统
区 extent : 连续的64个页,大小是1M
页 page : 默认是连续的4个block,16K
页:最小的存储单元,默认16k
区:64个连续的页,共1M
段:一个表就是一个段,包含一个或多个区
第4章 初始化配置
4.1 配置的方法
(1) 初始化配置文件(日常)
(2) 预编译时(编译安装)
(3) 命令行启动(临时维护场景 mysqld_safe 、mysqld)
优先级3>1>2
4.2 初始化配置文件应用
作用:
(1)影响数据库的启动
(2)影响到数据库的客户端连接
(3)影响到数据初始化的功能
初始化配置文件格式
[标签]
配置项=xxxx
标签类型:服务端、客户端
服务器端标签:
[mysqld]
[mysqld_safe]
[server]
客户端标签:
[mysql]
[mysqldump]
[client]
配置文件的示例展示:
[root@db01 ~]# cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/app/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
server_id=6
port=3306
log_error=/data/mysql/mysql.log
[mysql]
socket=/tmp/mysql.sock
prompt=Master [\\d]>
4.3 MySQL读取配置文件读取顺序
[root@db01 ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
注:
默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。
但是,如果启动时加入了--defaults-file=xxxx时,以上的所有文件都不会读取.
第5章 多种启动方式介绍
1. 以上多种方式,都可以单独启动MySQL服务
2. mysqld_safe和mysqld一般是在临时维护时使用。
3. 另外,从Centos 7系统开始,支持systemd直接调用mysqld的方式进行启动数据库
5.1 通过命令行控制启动
[root@db01 ~]# systemctl start mysqld
[root@db01 ~]# /etc/init.d/mysqld start
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
[root@db01 ~]# mysqld --defaults-file=/tmp/a.txt &
5.2 关闭数据库方法
[root@db01 ~]# systemctl stop mysqld
[root@db01 ~]# /etc/init.d/mysqld stop
[root@db01 ~]# mysqladmin -uroot -p1 shutdown
5.3 说明
日常工作中就拿日常的操作去正常启动和关闭数据库
第6章 多实例配置
6.1 第一个里程:创建相关目录并授权
[root@db01 ~]# mkdir -p /data/330{7..9}/data
[root@db01 ~]# chown -R mysql.mysql /data/330*
6.2 第二个里程: 编写配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/soft/mysql5726
datadir=/data/3307/data
server_id=7
socket=/data/3307/mysql.sock
port=3307
innodb_data_file_path=ibdata1:512M;ibdata2:512M:autoextend
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/soft/mysql5726
datadir=/data/3308/data
server_id=8
socket=/data/3308/mysql.sock
port=3308
innodb_data_file_path=ibdata1:512M;ibdata2:512M:autoextend
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/soft/mysql5726
datadir=/data/3309/data
server_id=9
socket=/data/3309/mysql.sock
port=3309
innodb_data_file_path=ibdata1:512M;ibdata2:512M:autoextend
EOF
说明
如果数据库安装的时候修改了ibdata大小,那么配置多实例的时候,也要指定ibdata的大小,并且要和数据库的大小是一致的
6.3 第二个里程: 分别初始化数据
mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726 --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726 --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/soft/mysql5726 --datadir=/data/3309/data
6.4 第四个里程: systemd管理多实例
cat > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/soft/mysql5726/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE=5000
EOF
cat > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/soft/mysql5726/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE=5000
EOF
cat > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/soft/mysql5726/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE=5000
EOF
6.5 第五个里程: 启动多实例
systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309
6.6 连接测试
mysql -S /data/3307/mysql.sock
mysql -S /data/3308/mysql.sock
mysql -S /data/3309/mysql.sock