mysql 安装路径
docker安装
进入到容器 : docker exec -it mysql /bin/sh 后登录mysql 执行 select @@basedir ;
sh-4.2# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15564
Server version: 5.7.43 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select @@basedir
-> ;
+-----------+
| @@basedir |
+-----------+
| /usr/ |
+-----------+
1 row in set (0.00 sec)
mysql>
mac【unix】下安装
/usr/local/mysql/bin
找回root密码
在本地安装时,因为不需要对外接供服务可以将密码设置为简单的 如123456 ; 因之前设置的密码忘记,需要进行找回 。
-
关闭mysqld ; 可以是kill命令粗爆的方式或是systemctl stop xxx【centos】或是图形化中找到对应进程进行kill 【windows】。
-
跳过校验启动mysql :
mysqld --console --skip-grant-tables --user=mysql
-
在另一个窗口 执行客户端登陆操作, 提示需要输密码时,直接回车
-
mysql -u root -p -
切换到 mysql
use msyql; mysql> select user,host from user; +------------------+-----------+ | user | host | +------------------+-----------+ | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+ -
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 【如果你的root只能本地登录】
-
刷新权限
flush privileges;
以上是找回root密码的步骤。
创建 一个用户
mysql 用户是以 用户名@xxxx 来标识的,如root@localhost; root@% 是二个不同的用户。
msyql -u root -p; //以root用户登录
CREATE USER 'root'@'%' IDENTIFIED BY '123456'; //创建新用户,kme_15k是用户名,密码123456
GRANT ALL ON *.* TO 'root'@'%'; //添加所有权限
flush privileges; //最后这句必不可少,刷新数据库
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
mysql>
修改密码
SET PASSWORD FOR 'kme_15k'@'localhost' = PASSWORD('999999');
flush privileges; //最后这句必不可少,刷新数据库
查看java的安装路径
[Loaded java.lang.Shutdown from /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/rt.jar]
[Loaded java.lang.Shutdown$Lock from /Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/lib/rt.jar]
✘ ~ java -verbose
变量
mysql 会用到系统变量与状态变量来指示系统的运行状态 。 而大部分变量的设置与配置文件(或启动命令行中参数)相关。并且大部分都有全局与会话之分。
系统变量
MySQL服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为MySQL系统变量,比如允许同时连入的客户端数量用系统变量max_connections表示,表的默认存储引擎用系统变量default_storage_engine表示,查询缓存的大小用系统变量query_cache_size表示
SHOW VARIABLES [LIKE 匹配的模式];
状态变量
为了让我们更好的了解服务器程序的运行情况,MySQL服务器程序中维护了好多关于程序运行状态的变量,它们被称为状态变量。比方说Threads_connected表示当前有多少客户端与服务器建立了连接,Handler_update表示已经更新了多少行记录吧啦吧啦
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
字符集
mysql的字符集分为四个层面:
服务器级
mysql> SHOW VARIABLES LIKE 'character_set_server';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_server | utf8 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation_server';
+------------------+-----------------+
| Variable_name | Value |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+
1 row in set (0.00 sec)
数据库级
mysql> USE charset_demo_db;
Database changed
mysql> SHOW VARIABLES LIKE 'character_set_database';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| character_set_database | gb2312 |
+------------------------+--------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'collation_database';
+--------------------+-------------------+
| Variable_name | Value |
+--------------------+-------------------+
| collation_database | gb2312_chinese_ci |
+--------------------+-------------------+
1 row in set (0.00 sec)
mysql>
表级
show create table xxxx 查看
sys_role | CREATE TABLE `sys_role` (
`role_id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色名称',
`role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色权限字符串',
`role_sort` int NOT NULL COMMENT '显示顺序',
`data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '1' COMMENT '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '角色状态(0正常 1停用)',
`del_flag` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`role_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='角色信息表' |
列级
见表
几个常用的sql
show databases; -- 查看当前数据实例下的数据库
show tables; ----查看当前库下的表
show create table 表名; --- 查看创表语名
use 数据库 ;----- 切换数据库
客户端和服务端通信中的字集转换
我们知道从客户端发往服务器的请求本质上就是一个字符串,服务器向客户端返回的结果本质上也是一个字符串,而字符串其实是使用某种字符集编码的二进制数据。这个字符串可不是使用一种字符集的编码方式一条道走到黑的,从发送请求到返回结果这个过程中伴随着多次字符集的转换,在这个过程中会用到3个系统变量,我们先把它们写出来看一下:
| 系统变量 | 描述 |
|---|---|
character_set_client | 服务器解码请求时使用的字符集 |
character_set_connection | 服务器处理请求时会把请求字符串从character_set_client转为character_set_connection |
character_set_results | 服务器向客户端返回数据时使用的字符集 |
这几个系统变量在我的计算机上的默认值如下(不同操作系统的默认值可能不同):
mysql> SHOW VARIABLES LIKE 'character_set_client';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_client | utf8 |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'character_set_connection';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| character_set_connection | utf8 |
+--------------------------+-------+
1 row in set (0.01 sec)
mysql> SHOW VARIABLES LIKE 'character_set_results';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| character_set_results | utf8 |
+-----------------------+-------+
1 row in set (0.00 sec)
知道了在MySQL中从发送请求到返回结果过程里发生的各种字符集转换,但是为啥要转来转去的呢?不晕么?
答:是的,很头晕,所以我们通常都把 character_set_client 、character_set_connection、character_set_results 这三个系统变量设置成和客户端使用的字符集一致的情况,这样减少了很多无谓的字符集转换。为了方便我们设置,MySQL提供了一条非常简便的语句:
ini
复制代码
SET NAMES 字符集名;
这一条语句产生的效果和我们执行这3条的效果是一样的:
复制代码
SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;
比方说我的客户端使用的是utf8字符集,所以需要把这几个系统变量的值都设置为utf8:
很多时候,在使用客户端是查询出来的数据是乱码, 其实是客户端连接session级别的上述三个变量的字符集不正确导致。 如下面的例子。
例子1 字符集不一致。
使用mysql 客户端
mysql> SHOW VARIABLES LIKE 'character%'
-> ;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
mysql> show create table tbl_trade_order;
......
`supplier_deduct_amount` decimal(19,4) DEFAULT NULL COMMENT '????????????????????',
`create_time` datetime DEFAULT NULL COMMENT '????',
`update_time` datetime DEFAULT NULL COMMENT '????',
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=43644185 DEFAULT CHARSET=utf8mb4 COMMENT='???' |
----->>> 结果显示为乱码
例子2 调整字符集 [正确的姿势]
mysql> set names utf8mb4; -- 设字符集
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'character_set_results';
+-----------------------+---------+
| Variable_name | Value |
+-----------------------+---------+
| character_set_results | utf8mb4 |
+-----------------------+---------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'character%'
-> ;
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
mysql>
mysql> show create table tbl_trade_order;
.............
`supplier_deduct_amount` decimal(19,4) DEFAULT NULL COMMENT '计算完成',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=43644185 DEFAULT CHARSET=utf8mb4 COMMENT='订单表' |
后记
笔记觉的有用,请关注或是转发,亦可v我。