安装
Debian
deepin 15.11 64 bit
参考官方Installing MySQL on Linux Using the MySQL APT Repository
先下载安装MySQL APT Repository
1 |
|
安装
1 |
|
Redhat
1 |
|
服务管理
1 |
|
重置root密码
deepin15.7中安装mysql7,发现没有设置过root密码,用如下方法重置:
1、修改/etc/mysql/mysql.conf.d/mysqld.cnf,在最后增加skip-grant-tables
,然后重启mysql。
2、不用秘密直接登录(直接回车),mysql -u root -p
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysql';
Query OK, 0 rows affected (0.00 sec)
3、删除步骤1中新增的skip-grant-tables
,重启mysql即可。
数据库
实体分层
mysql 的实体分层由上至下依次是:
-
实例(instance)
对应mysqld 进程
-
库(database)
-
表(table)
-
记录(row)
-
字段(field)
从应用层面看,MySQL的数据库是用schema定义的。
1 |
|
连接
1 |
|
连接数
查看
1 |
|
修改
1 |
|
执行进程
查询进程
mysql> show processlist;
Id User Host db Command Time State Info
----- -------------- -------------------- -------------- ------- ----- ------------------------------- ----------------------------------------------------------------------------------------------------
57631 report_zh 192.168.1.201:53468 report_zh Sleep 20 (null)
57632 zhkj_mall 192.168.1.201:53470 zhkj_mall Sleep 20 (null)
57832 report_zh 192.168.1.53:45718 report_zh Query 64292 Sending data
select count(1) from cus_customer
结束进程
mysql> kill 57631;
字符集
1 |
|
查询字符集:
1 |
|
1 |
|
设置字符集,修改配置文件,比如:/etc/mysql/my.cnf
[mysqld]
character-set-server=utf8mb4
修改数据库字符集
1 |
|
修改表字符集
1 |
|
时区
mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name | Value |
+------------------+--------+
| system_time_zone | CST |
| time_zone | SYSTEM |
+------------------+--------+
2 rows in set (0.00 sec)
time_zone说明mysql使用system的时区,system_time_zone说明system使用CST时区。
方法一
实时生效,重启失效
mysql> set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区
mysql> set time_zone = '+8:00'; ##修改当前会话时区
mysql> flush privileges; #立即生效
方法二
[mysqld]
default-time_zone = '+8:00'
jdbc连接串指定时区serverTimezone=GMT%2B8
大小写
lower_case_table_names参数用于控制存储大小写和是否区分大小写,修改需要重启数据库生效。
0:表名存储为指定的大小写(按创建时是大写还是小写定),但是使用时(比如:select)区分大小写,默认值;
1:表名存储时全部转换为小写,但是比较的时候是不区分大小写;
2:表名存储为指定的大小写(按创建时是大写还是小写定),但是使用时(比如:select)用小写;
1 |
|
配置如下:
1 |
|
注释
1 |
|
引擎
查看数据库支持的引擎
1 |
|
设置默认引擎,修改配置文件,比如:/etc/my.cnf
[mysqld]
default-storage-engine=INNODB
查询当前数据库的引擎
1 |
|
查询表的引擎
1 |
|
修改表引擎
1 |
|
数据目录
[mysqld]
datadir=/var/lib/mysql
表
1 |
|
1 |
|
MySQL要求一个行的定义长度不能超过65535。
(1)单个字段如果大于65535,则转换为TEXT 。
(2)单行最大限制为65535,这里不包括TEXT、BLOB。
超过长度报错如下:
Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check your manual. You have to change some columns to TEXT or BLOBs
排序
当排序值相同时,查询结果不是幂等的,有可能同样的查询两次结果不一样,可以通过增加一个排序字段,确保排序字段唯一。
索引
隶属于表,表下名称唯一
1 |
|
用户
通过授权的方式创建用户(deprecated)
1 |
|
单独创建用户
1 |
|
查询用户
1 |
|
grant
1 |
|
执行sql文件
方法一
1 |
|
备注:执行后没有结果提示信息。
方法二
1 |
|
方法三
1 |
|
1 |
|
直接执行sql
1 |
|
查询结果输出到文件
方法一
1 |
|
方法二
mysql> pager cat > /tmp/abc.txt;
PAGER set to 'cat > /tmp/abc.txt'
mysql> select 1 from dual;
1 row in set (0.00 sec)
mysql>
分页
不用统计总条数和总页数,仅提供下一页和上一页功能
currentLastValue:代表当前页最后一条记录的a1值,首页时为空
currentFirstValue:代表当前页第一条记录的a1值,首页时为空
升序分页
首页
1 |
|
下一页
1 |
|
上一页
1 |
|
例如:
1 |
|
降序分页
首页
1 |
|
下一页
1 |
|
上一页
1 |
|
例如:
1 |
|
其他特性
ON DUPLICATE KEY UPDATE
1 |
|
binlog
开启binlog
1 |
|
查看
show variables like 'log_bin%';
相关书籍
《高性能MySQL(第3版)》,MySQL 5.5
《MySQL技术内幕(第5版)》,MySQL 5.5
《MySQL5.7从入门到精通》,MySQL 5.7