1. MySQL结构:C/S结构
client/server
MySQL自带的客户端程序:
mysql
mysqladmin
mysqldump
2. MySQL的两种连接方式
1.TCP/IP连接(远程、本地)
mysql -uroot -p -h127.0.0.1
mysql -uroot -p -h127.0.0.1 -S /tmp/mysql.sock
2.socket连接(仅本地)
mysql -uroot -p -hlocalhost
mysql -uroot -p123(默认连接方式,socket)
注意:1.因为使用TCP/IP连接,需要建立三次握手2.不一定-h都是tcp,-hlocalhost是socket连接
3. MySQL实例介绍
1.什么是实例?<br /> 一个进程 + 多个线程 + 预分配内存空间<br /> 2.多实例?<br /> 多个进程 + 多个线程 + 多个预分配的内存空间
实例=mysqld后台守护进程+Master Thread +干活的Thread+预分配的内存公司=老板+经理+员工+办公室
4. mysqld程序运行原理
4.1 mysqld程序结构
一条SQL语句的执行过程
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层交互的线程
4.2 MySQL的物理结构
MySQL的最底层的物理结构是数据文件,也就是说,存储引擎层,打交道的文件,是数据文件。
4.3 MySQL的逻辑结构
库:库名,库属性<br /> 表:元数据+真实数据行<br /> 元数据:列+其它属性(行数+占用空间大小+权限)<br /> 列:列名字+数据类型+其他约束(非空、唯一、主键、非负数、自增长、默认值)
段:一个表就是一个段,一个段是由多个区组成
区:一个区是由多个页组成
页:在数据库中最小单位,页 16K
分区表:由一个区构成的段就是一张分区表
5. MySQL的多实例
多个进程 + 多个线程 + 多个预分配的内存空间
多套配置文件
1.多套数据目录
2.多个端口
3.多个socket文件
4.多个日志文件
步骤:
1.创建多个数据目录
[root@db01 ~]# mkdir /data/{3307,3308,3309} -p
2.准备多个配置文件<br /> [root[@db01 ](/db01 ) data]# vim /data/3307/my.cnf <br /> [mysqld]<br /> basedir=/usr/local/mysql<br /> datadir=/data/3307/data<br /> port=3307<br /> socket=/data/3307/mysql.sock<br /> log-error=/data/3307/data/mysql.err<br /> log-bin=/data/3307/data/mysql-bin<br /> server_id=7
[root[@db01 ](/db01 ) data]# vim /data/3308/my.cnf <br /> [mysqld]<br /> basedir=/usr/local/mysql<br /> datadir=/data/3308/data<br /> port=3308<br /> socket=/data/3308/mysql.sock<br /> log-error=/data/3308/data/mysql.err<br /> log-bin=/data/3308/data/mysql-bin<br /> server_id=8
[root[@db01 ](/db01 ) data]# vim /data/3309/my.cnf <br /> [mysqld]<br /> basedir=/usr/local/mysql<br /> datadir=/data/3309/data<br /> port=3309<br /> socket=/data/3309/mysql.sock<br /> log-error=/data/3309/data/mysql.err<br /> log-bin=/data/3309/data/mysql-bin<br /> server_id=93.初始化多套数据目录<br /> 3307:<br /> [root[@db01 ](/db01 ) scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data3308:<br /> [root[@db01 ](/db01 ) scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data3309:<br /> [root[@db01 ](/db01 ) scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data4.授权<br /> [root[@db01 ](/db01 ) scripts]# chown -R mysql.mysql /data5.启动MySQL<br /> [root[@db01 ](/db01 ) scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf & <br /> [root[@db01 ](/db01 ) scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf & <br /> [root[@db01 ](/db01 ) scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &6.检查端口<br /> [root[@db01 ](/db01 ) scripts]# netstat -lntup|grep 330 <br /> tcp6 0 0 :::3307 :::* LISTEN 25550/mysqld<br /> tcp6 0 0 :::3308 :::* LISTEN 25722/mysqld<br /> tcp6 0 0 :::3309 :::* LISTEN 25894/mysqld7.设置多实例密码<br /> [root[@db01 ](/db01 ) scripts]# mysqladmin -uroot -S /data/3307/mysql.sock password '3307' <br /> [root[@db01 ](/db01 ) scripts]# mysqladmin -uroot -S /data/3308/mysql.sock password '3308' <br /> [root[@db01 ](/db01 ) scripts]# mysqladmin -uroot -S /data/3309/mysql.sock password '3309'8.验证库连接<br /> [root[@db01 ](/db01 ) scripts]# mysql -uroot -p3307 -S /data/3307/mysql.sock -e "show variables like 'server_id';" <br /> Warning: Using a password on the command line interface can be insecure.<br /> +---------------+-------+<br /> | Variable_name | Value |<br /> +---------------+-------+<br /> | server_id | 7 |<br /> +---------------+-------+[root[@db01 ](/db01 ) scripts]# mysql -uroot -p3308 -S /data/3308/mysql.sock -e "show variables like 'server_id';" <br /> Warning: Using a password on the command line interface can be insecure.<br /> +---------------+-------+<br /> | Variable_name | Value |<br /> +---------------+-------+<br /> | server_id | 8 |<br /> +---------------+-------+[root[@db01 ](/db01 ) scripts]# mysql -uroot -p3309 -S /data/3309/mysql.sock -e "show variables like 'server_id';" <br /> Warning: Using a password on the command line interface can be insecure.<br /> +---------------+-------+<br /> | Variable_name | Value |<br /> +---------------+-------+<br /> | server_id | 9 |<br /> +---------------+-------+连接的小技巧:<br /> [root[@db01 ](/db01 ) scripts]# vim /usr/bin/mysql3309 <br /> mysql -uroot -p3309 -S /data/3309/mysql.sock<br /> [root[@db01 ](/db01 ) scripts]# vim /usr/bin/mysql3308 <br /> mysql -uroot -p3308 -S /data/3308/mysql.sock<br /> [root[@db01 ](/db01 ) scripts]# vim /usr/bin/mysql3307 <br /> mysql -uroot -p3307 -S /data/3307/mysql.sock[root[@db01 ](/db01 ) scripts]# chmod +x /usr/bin/mysql*
