- 1. 下载与安装
- 1.1 mac电脑
- 1.2 虚拟机安装
- 环境
- 检查当前系统中是否存在MySQL
- 依次删除上一个命令查询出来的目录,没有则忽略即可
- 查询是否还有mysql的文件和库
- 删除上一个命令查询出来的目录,没有则忽略即可
- 上传下载MySQL Yum存储库
- 使用以下命令安装下载的发行包,version-number: 换成和上面的包名称一样
- 通过以下命令安装 MySQL,—nogpgcheck: 禁掉GPG验证检查,具体看bug章节
- 启动MySQL
- 查看MySQL进程
- 命令检查 MySQL 服务器的状态
- 查看临时密码,这个密码对应的账户是root账户
- 进入MySQL客户端
- 修改临时密码,注意复杂一点
- 刷新权限,注意: 自己测试不刷新好像也没问题
- 1. 数据类型
- 2. 事务、隔离级别
- 3. 锁
- 4. 索引
- 5. sql优化
- 6. 主从同步
- 面试题
http://yum.mariadb.org/10.4/centos8-amd64/
1. 下载与安装
1.1 mac电脑
1.1.1 安装流程
- 软件傻瓜式点击下一步,中间有一个需要设置密码
- 设置环境变量,并且在设置中开启mysql
打开终端
mysql -u root -p
然后输入mysql
的密码1.1.2 设置环境变量
设置环境变量
- 找文件设置
- 打开finder(访达),快捷键
command+shift+G
,输入~/.bash_profile
,前往 - 双击打开文件
.bash_profile
,没有的话就新建(该文件为隐藏文件) - 文件内输入
export PATH=$PATH:/usr/local/mysql/bin
,保存,第一步结束
- 打开finder(访达),快捷键
- 终端设置
vim ~/.bash_profile
- 按
i
编辑,在最后面添加export PATH=$PATH:/usr/local/mysql/bin
- 找文件设置
刷新环境变量
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*
1.2 虚拟机安装
1.2.1 视频教程
- https://class.imooc.com/lesson/1236#mid=30704
1.2.2 文字教程
```makefile环境
CentOS 7、MySQL 8
检查当前系统中是否存在MySQL
rpm -qa|grep mysql
依次删除上一个命令查询出来的目录,没有则忽略即可
rpm -r —nodeps xxx…
查询是否还有mysql的文件和库
find / -name mysql
删除上一个命令查询出来的目录,没有则忽略即可
rm -rf xxx
上传下载MySQL Yum存储库
mysql80-community-release-el7-6.noarch.rpm
使用以下命令安装下载的发行包,version-number: 换成和上面的包名称一样
sudo yum install mysql80-community-release-el7-{version-number}.noarch.rpm
通过以下命令安装 MySQL,—nogpgcheck: 禁掉GPG验证检查,具体看bug章节
sudo yum install mysql-community-server —nogpgcheck
启动MySQL
systemctl start mysqld
查看MySQL进程
ps -ef|grep mysqld
命令检查 MySQL 服务器的状态
systemctl status mysqld
查看临时密码,这个密码对应的账户是root账户
sudo grep ‘temporary password’ /var/log/mysqld.log
进入MySQL客户端
mysql -uroot -p
修改临时密码,注意复杂一点
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘@Aroot1234’;
刷新权限,注意: 自己测试不刷新好像也没问题
mysql> flush privileges
<a name="ykcVL"></a>
### 1.2.3 文图教程
![image.png](https://cdn.nlark.com/yuque/0/2022/png/26687455/1654224949565-c82927cc-ad94-455f-9e5c-78c6bb1f4201.png#clientId=u464d533c-7efe-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=268&id=cY5mj&margin=%5Bobject%20Object%5D&name=image.png&originHeight=536&originWidth=1714&originalType=binary&ratio=1&rotation=0&showTitle=false&size=85529&status=done&style=none&taskId=u00f11e09-1238-4a3b-a29b-7b34c1b46fb&title=&width=857)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26687455/1654224969580-e31a6264-a6e6-4d8e-91c4-fdf3b4a5bee1.png#clientId=u464d533c-7efe-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=680&id=pxamU&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1360&originWidth=2060&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1199013&status=done&style=none&taskId=ubb02644e-bdd9-4b90-90b6-35fe0b6903e&title=&width=1030)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26687455/1654224999573-6e7ced78-54bf-42a2-b20b-e4779406e7f8.png#clientId=u464d533c-7efe-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=796&id=DbdI0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1592&originWidth=2164&originalType=binary&ratio=1&rotation=0&showTitle=false&size=450637&status=done&style=none&taskId=u0ae73e74-373b-4f40-8fe3-fd27bf8fc7b&title=&width=1082)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26687455/1654225026995-52c5cce7-0be2-41a8-8b3f-1504246a7b7f.png#clientId=u464d533c-7efe-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=816&id=VE2Kc&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1632&originWidth=2288&originalType=binary&ratio=1&rotation=0&showTitle=false&size=1220284&status=done&style=none&taskId=ue7be5251-bd7d-48f7-a566-72ed859c84d&title=&width=1144)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26687455/1654225055510-17eaf808-1239-4695-98af-6600cb13858e.png#clientId=u464d533c-7efe-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=742&id=vjkv0&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1484&originWidth=2204&originalType=binary&ratio=1&rotation=0&showTitle=false&size=427644&status=done&style=none&taskId=udfe0d545-55e3-42c1-8471-1627c96aa0c&title=&width=1102)<br />![image.png](https://cdn.nlark.com/yuque/0/2022/png/26687455/1654225103316-39825279-f252-4ad7-abf8-92ef1e3b3e90.png#clientId=u464d533c-7efe-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=716&id=JhcY3&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1432&originWidth=2840&originalType=binary&ratio=1&rotation=0&showTitle=false&size=586810&status=done&style=none&taskId=ue263ad4e-0d95-455a-9fc2-a211f49914e&title=&width=1420)
<a name="OiwpD"></a>
### 1.2.4 遇到的一些bug
<a name="VzZlM"></a>
### 1.2.5 navicat连接MySQL
```makefile
## 创建用户"YiHua",由于navicat使用的是老版本的加密方式,所以使用mysql_native_password
mysql> create user 'YiHua'@'%' identified with mysql_native_password by '@Aroot1234';
## 赋予权限
mysql> grant all on *.* to 'YiHua'@'%'
## 刷新配置
mysql> flush privileges;
## 关闭防火墙
systemctl stop firewalld
## 这里防火墙的设置问题? 后续在学习
是长久关闭所有端口?
本次启动关闭所有端口?
本次启动单独关闭3306端口?
长久关闭3306端口?
1. 数据类型
1.1 VARCHAR (50) 中的 50 到底是能存 50 个字还是 50 个字节?
VARCHAR
的括号中的数字代表的是字符。如果存的是字节,由于中文、英文和emoji
在utf-8
中的字节数都不一样,势必会给编程造成一定的困扰。
1.2 CHAR (50) 和 VARCHAR (50) 有什么区别?
- 存储方式上存在着差异
CHAR
是定长字符,MySQL
数据库会根据建表时定义的长度给它分配相应的存储空间,不足的部分用空格填充- 而 VARCHAR 是可变长度字符的数据类型,在存储时只使用必要的空间。
CHAR
数据类型的这个特性,在将数据写入表中时,如果字符串尾部存在空格,会被自动删除,而VARCHAR
数据类型会保留这个空格,在一些特殊场景中要注意这个问题。所以推荐你使用CHAR
数据类型存储一些固定长度的字符串,比如身份证号、手机号、性别等CHAR 和 VARCHAR 的存储长度不同
InnoDB
的数据页默认是16K
,每个页中至少存放2
行数据,因此建议VARCHAR
字段的总长度不要超过8K
- 由于存储的是字符,
utf-8
字符集中一个汉字占用3
个字节,因此我们能创建的最大长度理论上应该是21845(65535/3=21845)
,但是为什么varchar(21845)
仍然报错,而使用varchar(21844)
却创建成功 - 虽然
MySQL
官方定义了最大行长度是65535
个字节,但是因为还有别的开销,我们能使用的最大行长度只有65532
(理解:就想向以前的SD
卡一样,64G
内存永远小于64
) MySQL
的最大行长度限制不只是1
个VARCHAR
列,而是所有列的长度总和1.4 常见的几个数据类型的长度
tinyint
:1字节,2^7 - 1
int
:4字节,2^15 - 1
bigint
:8字节,2^63 - 1
2. 事务、隔离级别
2.1 事务的四大特性
2.2 事务的隔离级别
3. 锁
3.1 InnoDB行锁
3.2 mysql的乐观锁和悲观锁
3.3 共享锁和排它锁
4. 索引
5. sql优化
6. 主从同步
6.1 概念解析
- 解决数据库读写压力的方案
- 读写分离 = 主从配置
- 主库用来写操作,读库用来查询操作
主从同步的原理
教程来源架构师-分库分表章节
- 案例配置的是1主1从模式
- 主数据库:
192.168.73.131
- 从数据库:
192.168.73.130
-
6.3 修改配置文件
6.3.1 文件的属性说明
my.conf
:MySQL
的主要配置文件,大概率在/etc/my.conf
log-bin
:bin-log
文件的名称server-id
:MySQL
实例中全局唯一,默认为1
,且必须大于0
,既然全局唯一主从配置不能一样6.3.2 实际的配置
主数据库配置:编辑主库的
my.conf
log-bin=imooc_mysql
server-id=1
- 从数据库配置:编辑从库的
my.conf
server-id=2
配置完成后重启数据库:
service mysqld restart
,注意配置完my.conf
之后就重启6.4 在主库上创建用于备份账号
mysql> create user 'repl'@'%' identified by 'password';
mysql> grant replication save on *.* TO 'repl'@'%';
mysql> flush privileges;(刷新权限)
6.5 将主库现有数据同步到从库
给主库加锁,阻止所有的写入操作
mysql> flush tables with read lock;
- 查看主库上bin-log文件的位置
mysql > show master status;
- 从主库上dump所有的数据,注意下面的命令不能在MySQL的命令行执行
- 导出数据:
mysqldump --all-databases --master-data > dbdump.db -uroot -p
- 上面的数据就导出到
/root
目录下面了 - 复制到从库,进入
130
的/root
目录:scp root@192.168.73.131:~/dbdump.db .
- 导出数据:
- 给主库解锁
mysql> unlock tables;
在从库上导入主库的数据
从库订阅主库的bin-log位置
mysql> change master to
master_host='192.168.73.131',
:主库的地址master_root='repl',
:要是有备份账号的信息master_passpord='passpord',
:和上一条一样master_log_file='imooc_mysql.000001',
:主库的bin-log
的名称master_log_pos='854';
:主库的bin-log
的位置
- 开启主从同步
mysql> start slave;
- 查看从库的状态
show slave status;
面试题
海量数据分页问题
问题的一个背景:使用limit分页查询,查询第一页和查询第10000页的性能区别
https://wenku.baidu.com/view/afb1934224d3240c844769eae009581b6bd9bdbd.html
https://www.zhihu.com/question/483374102