文章目录
基本操作
-
在线安装
yum install -y mariadb mariadb-server
systemctl start mariadb && systemctl enable mariadb
初始化:mysql_secure_installation
#登陆mysql
$ mysql -uroot -p
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
4 rows in set (0.00 sec)
#ok 退出MySQL 重启服务
mysql> quit;
$ systemctl restart mariadb
#发现客户端远程还是连接不上 继续修改mysql.cnf配置文件
#需要root权限,配置文件是只读的
$ vim /etc/mysql.cnf
#往下翻,注释掉这一行,保存退出
# bind-address = 127.0.0.1
#重启服务
$ service mysql restart;
#ok 可以了
或者
#允许所有用户远程访问 修改用户名和密码为你自己的
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
#允许单个ip 修改用户名和密码为你自己的
mysql> GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
#最后
mysql> FLUSH PRIVILEGES;
Oracle-SQL语法
MySQL语法
骚操作
1、查询连接数:
- mysqladmin -uroot -proot processlist / status
修改mysql连接数: - /etc/my.conf | my.ini 中的max_connections=1000
日志位置: - /var/log/mysql.log
- MySQL的各个位置:
2、mysql的压力:
-
单表 500万条
-
单库 30个分表
-
一亿条数据
-
磁盘扇区 512 byte
-
文件系统块 4KB=8扇区
-
InnoDB页 16KB=4块=16*1行(假设1KB)
- 非叶子节点:键值+指针
- 叶子节点:数据
- 一个页中不可能所有空间都用于存放数据,它还会存放一些少量的其他字段比如page level,index number等等,另外还有页的填充因子也导致一个页不可能全部用于保存数据。 -
为什么MySQL的索引要使用B+树而不是其它树形结构?比如B树?
- 因为B树不管叶子节点还是非叶子节点,都会保存数据,这样导致在非叶子节点中能保存的指针数量变少(有些资料也称为扇出)指针少的情况下要保存大量数据,只能增加树的高度,导致IO操作变多,查询性能变低;
3、必须会的数据库面试题
1、为什么 MySQL 的索引要使用 B+ 树,而不是其它树?
- B±tree的查询效率更加稳定
- B+的磁盘读写代价更低
2、InnoDB的一棵B+树可以存放多少行数据?
- 约2千万==20G
3、什么情况下应不建或少建索引?
- 表记录太少
- 经常插入、删除、修改的表
- 数据重复且分布平均的表字段
4、分表、表分区
- 分表:指的是通过一定规则,将一张表分解成多张不同的表
- 表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分
- 表分区存储更多数据、优化查询、分区表更容易维护
5、MySQL优化
- 开启查询缓存,优化查询
- explain你的select查询
- 为搜索字段建索引
- 垂直分表
- 对于大数据字段,独立表进行存储
SQL注入式
InnoDB引擎原理-ACID-事务隔离级别
分布式mysql
坑
- 允许字段的值为 null,往往会引发灾难
- 尽可能用 union 来代替 or