mysql CentOS安装
一、rpm包安装
1.检查当前系统是否安装过 Mysql
rpm -qa|grep mariadb
卸载自带的mariadb
rpm -e --nodeps mariadb-libs
2.下载mysql
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
3.安装mysql
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
4.启动mysql
systemctl start mysqld.service
5.查看状态
systemctl status mysqld.service
6.查看root初始密码
grep "password" /var/log/mysqld.log
7.登录mysql修改初始密码
mysql -uroot -p
#修改密码 new password为新密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
若修改的密码是弱密码则需要修改密码策略
vi /etc/my.cnf
添加validate_password_policy配置
选择0(LOW),1(MEDIUM),2(STRONG)其中一种
#添加validate_password_policy配置
validate_password_policy=0
#关闭密码策略
validate_password = off
重启mysql服务使配置生效
systemctl restart mysqld
8.开启mysql远程访问
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;
flush privileges;
exit;
9.修改字符编码
vi /etc/my.cnf
修改以下内容
[mysqld]
character_set_server=utf8mb4
[mysql]
default-character-set=utf8mb4
10.设置大小写不敏感
查看大小写是否敏感
show variables like '%lower_case_table_names%'
设置大小写不敏感
vi /etc/my.cnf
在 [mysqld] 中加入 lower_case_table_names = 1
[mysqld]
lower_case_table_names = 1
11.sql_model设置
sql_mode 定义了对 Mysql 中 sql 语句语法的校验规则!
sql_mode 是个很容易被忽视的变量, 默认值是空值, 在这种设置下是可以允许一些非法操作的, 比如允许一些非法数据的插入。 在生产环境必须将这个值设置为严格模式, 所以开发、 测试环境的数据库也必须要设置, 这样在开发测试阶段就可以发现问题。
sql_model常用值:
常用值 | 描述 |
---|---|
ONLY_FULL_GROUP_BY | 对于 GROUP BY 聚合操作, 如果在 SELECT 中的列, 没有在 GROUP BY 中出现,那么这个 SQL 是不合法的, 因为列不在 GROUP BY 从句中 |
NO_AUTO_VALUE_ON_ZERO | 该值影响自增长列的插入。 默认设置下, 插入 0 或 NULL 代表生成下一个自增长值。 如果用户 希望插入的值为 0, 而该列又是自增长的, 那么这个选项就有用了 |
STRICT_TRANS_TABLES | 在该模式下, 如果一个值不能插入到一个事务表中, 则中断当前的操作, 对非事务表不做限制 |
NO_ZERO_IN_DATE | 在严格模式下, 不允许日期和月份为零 |
NO_ZERO_DATE | 设置该值, mysql 数据库不允许插入零日期, 插入零日期会抛出错误而不是警告 |
ERROR_FOR_DIVISION_BY_ZERO | 在 INSERT 或 UPDATE 过程中, 如果数据被零除, 则产生错误而非警告。 如 果未给出该模式, 那么数据被零除时 MySQL 返回 NULL |
NO_AUTO_CREATE_USER | 禁止 GRANT 创建密码为空的用户 |
NO_ENGINE_SUBSTITUTION | 如果需要的存储引擎被禁用或未编译, 那么抛出错误。 不设置此值时, 用默认的存储引擎替代, 并抛出一个异常 |
PIPES_AS_CONCAT | 将||视为字符串的连接操作符而非或运算符, 这和 Oracle 数据库是一样的,也和字符串的拼接函数 Concat 相类似 |
ANSI_QUOTES | 启用 ANSI_QUOTES 后, 不能用双引号来引用字符串, 因为它被解释为识别符 |
ORACLE | 设置等同于 PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE,NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER |
查看和修改:
查看当前的 sql_mode: select @@sql_mode;
临时修改 sql_mode: set @@sql_mode=’’;
永久修改, 需要在配置文件 my.cnf 中修改:
vi /etc/my.cnf
[mysqld]
sql_mode=’’
二、docker安装
1.编写docker脚本
#!/bin/bash
docker stop mysql
docker rm mysql
docker run --name mysql --restart=always \
-v `pwd`/conf:/etc/mysql/conf.d \
-v `pwd`/data/:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD="root" \
-e TZ=Asia/Shanghai \
-d mysql:5.7.9
配置文件/conf/my.cnf
[mysql]
default-character-set=utf8mb4
[mysqld]
federated
default-storage-engine=INNODB
character_set_server=utf8mb4
datadir = /var/lib/mysql
port = 3306
socket = /var/run/mysqld/mysqld.sock
lower_case_table_names=1
ft_min_word_len=1
max_allowed_packet=100M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
max_connections = 32000
其他参数请参照rpm安装修改my.cnf
三、配置
参数 | 路径 | 描述 | 备注 |
---|---|---|---|
– datadir | /var/lib/mysql/ | mysql 数据库文件的存放路径 | ----- |
–basedir | /usr/bin | 相关命令目录 | mysqladmin mysqldump 等命令 |
–plugin-dir | /usr/lib64/mysql/plugin | mysql 插件存放路径 | ----- |
–log-error | /var/lib/mysql/jack.atguigu.err | mysql 错误日志路径 | ----- |
–pid-file | /var/lib/mysql/jack.atguigu.pid | 进程 pid 文件 | ----- |
–socket | /var/lib/mysql/mysql.sock | 本地连接时用的 unix 套接字文件 | ----- |
----- | /usr/share/mysql | 配置文件目录 | mysql 脚本及配置文件 |
----- | /etc/init.d/mysql | 服务启停相关脚本 | ----- |
MySQL 不会主动去创建日志文件,所以需要在my.cnf中手动添加,添加完成后赋予所有用户可读可写权限,否则会报 premission denied
# 开启通用日志
general_log=1
# 通用日志地址
general_log_file=/usr/local/mysql/mysql-5.7/log/general.log
# 开启慢查询日志
slow_query_log=1
# 慢查询日志地址
slow_query_log_file=/usr/local/mysql/mysql-5.7/log/slowqueries.log
# 慢查询阀值
long_query_time=5
# 输出方式,FILE表示文件,TABLE表示数据库(可以在mysql库中看到日志),可以同时使用,方法如上,也可单独使用比如log_output='FILE',输出到文件比输出到数据库效率高
log_output='FILE,TABLE'
四、mysql用户权限
4.1 用户管理
1.相关命令
命令 | 描述 | 备注 |
---|---|---|
create user zhang3 identified by ‘123123’; | 创建名称为 zhang3 的用户,密码设为 123123; | ----- |
select host,user,password,select_priv,insert_priv,drop_privfrom mysql.user; | 查看用户和权限的相关信息 | ----- |
set password =password(‘123456’) | 修改当前用户的密码 | ----- |
update mysql.user set password=password(‘123456’) where user=‘li4’; | 修改其他用户的密码 | 所有通过 user 表的修改, 必须用 flush privileges;命令才能生效 |
update mysql.user set user=‘li4’ where user=‘wang5’; | 修改用户名 | 所有通过 user 表的修改, 必须用 flush privileges;命令才能生效 |
drop user li4 | 删除用户 | 不要通过 delete from user uwhere user=‘li4’ 进行删除, 系统会有残留信息保留。 |
2.示例
select host,user,password,select_priv,insert_priv,drop_priv form mysql.user;
host : 表示连接类型
% 表示所有远程通过 TCP 方式的连接
IP 地址 如 (192.168.1.2,127.0.0.1) 通过制定 ip 地址进行的 TCP 方式的连接
机器名 通过制定 i 网络中的机器名进行的 TCP 方式的连接
::1 IPv6 的本地 ip 地址 等同于 IPv4 的 127.0.0.1
localhost 本地方式通过命令行方式的连接 , 比如 mysql -u xxx -p 123xxx 方式的连接。
user: 表示用户名
同一用户通过不同方式链接的权限是不一样的。
password: 密码
所有密码串通过 password(明文字符串) 生成的密文字符串。 加密算法为 MYSQLSHA1 , 不可逆 。
mysql 5.7 的密码保存到 authentication_string 字段中不再使用 password 字段。
select_priv , insert_priv 等
为该用户所拥有的权限。
4.2 用户权限管理
1.授予权限
命令 | 描述 |
---|---|
grant 权限 1,权限 2,…权限 n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’ | 该权限如果发现没有该用户, 则会直接新建一个用户。 |
grant all privileges on . to joe@’%’ identified by ‘123’; | 授予通过网络方式登录的的 joe 用户 , 对所有库所有表的全部权限, 密码设为 123. |
2.收回权限
命令 | 描述 |
---|---|
show grants | 查看当前用户权限 |
revoke [权限 1,权限 2,…权限 n] on库名.表名 from 用户名@用户地址 ; | 收回权限命令 |
REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost; | 收回全库全表的所有权限 |
REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost; | 收回 mysql 库下的所有表的插删改查权限 |
3查看权限
命令 | 描述 |
---|---|
show grants; | 查看当前用户权限 |
select * from user ; | 查看全部用户权限 |