my.cnf mysql配置文件

my.cnf

  • 环境
    • 停止启动MySQL
  • my.cnf文件
  • 基础参数
  • character_set
  • utf8mb4
  • mysql查询数据库版本
  • 忘记密码
  • 修改密码mysql8
  • 创建用户并授权
  • mysql修改字段
  • mysql查询表结构

环境

[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

Server version: 5.6.35 MySQL Community Server (GPL)

停止启动MySQL

[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# systemctl start mysqld

my.cnf文件

[mysqld]
port=3306
basedir=/usr/local/mysql
datadir=/mydata/mysql/data
socket=/mydata/mysql/mysql.sock
pid-file=/mydata/mysql/mysql.pid

log-error=/mydata/mysql/error.log
tmpdir=/tmp
server_id=1
user=mysql

#skip-grant-tables
character-set-server=utf8mb4
explicit_defaults_for_timestamp=on
secure-file-priv=NULL

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
[client]
default-character-set=utf8mb4
socket=/mydata/mysql/mysql.sock
[mysql]
default-character-set = utf8mb4

基础参数

  • port:指定了mysql的开放端口
  • basedir:指定了安装 MySQL 的绝对路径
  • datadir:指定了 MySQL 的数据库文件存放的绝对路径
  • socket:套接字文件
  • 默认路径:/tmp/mysql.sock 需要在[mysqld]和[client]下面都配置
    mysql -uroot -p 访问本地需要用到socket
    mysql -h 127.0.0.1 -uroot -p 用到tcp协议
  • pid-file:默认路径 $datadir/**hostname**.pid
  • PID文件的作用是为了防止同一个数据库被启动多次
  • 通过Mysqld_safe启动mysql时,mysqld_safe会检查pid文件
    pid文件不存在,不做处理
    文件存在,且pid已占用则报错"A mysqld process already exists"
    文件存在,但pid未占用,则删除pid文件
    mysqld启动后会通过create_pid_file函数新建pid文件,通过getpid()获取当前进程pid并将PID写入pid文件

character_set

默认字符集,操作数据库会产生乱码:
在这里插入图片描述
my.cnf mysql配置文件_第1张图片

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     | utf8mb4                          |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+
8 rows in set (0.00 sec)

my.cnf mysql配置文件_第2张图片

  • character_set_client:主要用来设置客户端使用的字符集
  • character_set_connection: 主要用来设置连接数据库时的字符集, 如果程序中没有指明连接数据库使用的字符集类型则按照这个字符集设置。
    例如:jdbc:mysql://aliyunhost:3306/test?useUnicode=true&characterEncoding=utf8
  • character_set_database: 主要用来设置默认创建数据库的编码格式,如果在创建数据库时没有设置编码格式,就按照这个格式设置。 CREATE DATABASE IF NOT
    EXISTS my_db default character set utf8 COLLATE utf8_general_ci;
  • character_set_results: 数据库给客户端返回时使用的编码格式,如果没有指明,使用服务器默认的编码格式。
  • character_set_server: 服务器安装时指定的默认编码格式,这个变量建议由系统自己管理,不要人为定义。
  • character_set_system: 数据库系统使用的编码格式,这个值一直是utf8,不需要设置,它是为存储系统元数据的编码格式。
  • character_sets_dir: 这个变量是字符集安装的目录。

utf8mb4

MySQL 的“utf8”实际上不是真正的 UTF-8
“utf8”只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。
MySQL 一直没有修复这个 bug,他们在 2010 年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。

MySQL 的“utf8mb4”是真正的“UTF-8”。
MySQL 的“utf8”是一种“专属的编码”,它能够编码的 Unicode 字符并不多。

mysql查询数据库版本

select @@version;
select version();

忘记密码

在/etc/my.cnf中添加skip-grant-tables
重启MySQL后可以不用密码登陆

mysql> use mysql;
mysql> update user set password=password('123456') where user='username';

更新密码后把【skip-grant-tables】删掉

修改密码mysql8

mysql> use mysql
mysql> update user set authentication_string='' where user='username';
mysql> flush privileges;
mysql>  alter user 'username'@'%' identified by 'password';

创建用户并授权

mysql> use mysql
mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' ;
mysql> select user, host from user where user='username';
+---------+------+
| user    | host |
+---------+------+
| username| %    |
+---------+------+
1 row in set (0.04 sec)

mysql修改字段

-- 增加字段 (添加注解,指定默认值, 添加在字段 id 的后面)
alter table t_goods
add column name varchar(128) default '' comment '名称' after id;

-- 修改字段长度
alter table t_goods
modify column name varchar(256);

-- 修改字段名称
alter table t_goods
change name myname varchar(256) comment '我的名称';

-- 删除字段
alter table t_goods
drop column myname;

mysql查询表结构

select TABLE_NAME, TABLE_COMMENT from information_schema.`TABLES` 
where TABLE_SCHEMA = 'systemmanage'
and TABLE_NAME = 't_prc_pro_config_lang';

select 
ORDINAL_POSITION, COLUMN_COMMENT, COLUMN_NAME, DATA_TYPE, CHARACTER_OCTET_LENGTH, COLUMN_KEY, if(IS_NULLABLE='NO','YES','NO') AS REQUIRED, COLUMN_DEFAULT
from information_schema.`COLUMNS`
where TABLE_NAME = 't_prc_pro_config_lang'
order by ORDINAL_POSITION;

你可能感兴趣的:(#,mysql,数据库,mysql)