1、MySQL 程序运行的原理
1.1 mysql 结构
1
1.2 一条SQL语句的连接过程
连接层:
1、提供链接协议:tcp/ip、socket
2、提供验证:用户、密码、IP、socket
3、提供专用链接线程:接受用户SQL、返回结果
1.3 表的物理存储结构
myisam: user.frm user.myd, user.myi
innodb: user.ibd、user.frm
存储列相关信息:frm
存储数据行+索引:ibd
1.4 表的表空间、段、区、页
页:最小的存储单元、默认16K
区: 64个连续的页:共1M
段:一个表就是一个段,包含一个或多个区
2、 基础管理
用户、权限管理
用户名@'白名单'
白名单支持的方式?
wordpress@'10.0.0.%'
wordpress@'%'
wordpress@'10.0.0.200'
wordpress@'localhost'
wordpress@'db02'
wordpress@'10.0.0.5%'
wordpress@'10.0.0.0/255.255.254.0'
管理操作:
create user xiaopan@‘192.168.1.%’ identified by '123';
desc mysql.user;
select user,host,authentication_string from mysql.user;
alter user 'xiaopan'@'192.168.1.%' identified by '123456';
drop user 'xiaopan'@'192.168.1.%';
权限管理:
grant all on *.* to 'wordpress'@'%' identified by 'wordpress';
flush privileges;
ALL 权限包括:
select、insert update、drop 、delete、create 、reload 、shutdown、process、file 、index、alter、show database、showtable等等
提示: 8.0 在grant 命令添加新特性
新建用户和授权分开了,必须先创建用户在授权即:
create user ‘haha'@'192.168.1.%' identified by '123';
grant all on *.* to 'haha'@'192.168.1.%';
show grants for 'haha'@'192.168.1.%';
回收权限:
revoke delete on app.* from app@’10.0.0.%‘;
本地管理员用户密码忘记:
mysql_safe --skip-grant-tables --skip-networking &
alter user root@'localhost' identified by '111111';
flsh privileges;
5、多实例的应用
5.1 准备多个目录
mkdir /data/330{7,8,9}/data -p
5.2 准备配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF
5.3 如果/etc/目录下有my.cnf 文件需要把该文件移走
mv /etc/my.cnf /etc/my.cnf.bak
5.4 初始化三套数据
mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/app/mysql --user=mysql
mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/app/mysql --user=mysql
5.5 多实例管理
cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
vim mysqld3307.service
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
5.6 授权
chown -R mysql.mysql /data/
5.7 把/etc/目录下的my.cnf 文件移动回来
mv /etc/my.cnf.bak /etc/my.cnf