安装

## 所有源
http://repo.mysql.com/

## 5.7源
rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7-9.noarch.rpm

## 使用下面的指令就可以重新激活秘钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

yum install -y mysql-community-server

## 修改配置文件,免密登录添加:
vi /etc/my.cnf
skip-grant-tables

## 修改root密码,
mysql -uroot -p
use mysql;
update user set authentication_string=password("123456") where user="root";
flush privileges;

## 修改配置文件取消免密登录

systemctl start mysqld
systemctl restart mysqld

docker 安装

docker run -d \
-p 3306:3306 \
--privileged=true \
--restart=always \
-v /home/app/mysql/conf/my.cnf:/etc/my.cnf \
-v /home/app/mysql/data:/var/lib/mysql \
-e MYSQL_CHARACTER_SET=utf8mb4 \
-e MYSQL_COLLATE=utf8mb4_general_ci \
-e TZ=Asia/Shanghai \
--name mysql mysql:5.7

## 配置文件的处理方法
## 先启动不带配置文件的
## 复制位置文件
docker cp mysql:/etc/my.cnf /home/app/mysql/conf/
## 删除,重新启动

## 远程访问
docker exec -it mysql /bin/bash
mysql -u root –p
## 参考远程访问配置

run run 是运行一个容器
-d 表示后台运行
-p 表示容器内部端口和服务器端口映射关联
–privileged=true 设值MySQL 的root用户权限, 否则外部不能使用root用户登陆
-v /docker/mysql/conf/my.cnf:/etc/my.cnf 将服务器中的my.cnf配置映射到docker中的/docker/mysql/conf/my.cnf配置
-v /docker/mysql/data:/var/lib/mysql  同上,映射数据库的数据目录, 避免以后docker删除重新运行MySQL容器时数据丢失
-e MYSQL_ROOT_PASSWORD=123456   设置MySQL数据库root用户的密码
–name mysql     设值容器名称为mysql
mysql:5.7  表示从docker镜像mysql:5.7中启动一个容器
–character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci 设值数据库默认编码

mysq8.0

docker run -p 33306:3306 --name mysql8 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0

docker cp mysql8:/etc/my.cnf /home/app/mysql8/conf/

docker run -p 33306:3306 \
--privileged=true \
--restart=unless-stopped \
-e MYSQL_ROOT_PASSWORD=root \
-v /home/app/mysql8/conf/my.cnf:/etc/my.cnf \
-v /home/app/mysql8/data:/var/lib/mysql \
--name mysql8 -d mysql:8.0

docker exec -it mysql8 /bin/bash
mysql -u root -p

use mysql;

## 远程配置

远程访问

//登录mysql
mysql -uroot -p

use mysql;
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;

CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' WITH GRANT OPTION;

//立即生效
flush privileges;

修改端口号

vi /etc/my.cnf
在[mysqld]下面添加一行
port=3306 端口号

//重启服务
systemctl restart mysqld

本机

//登录mysql
mysql -uroot -p

use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'bak'@'127.0.0.1' IDENTIFIED BY '123456' WITH GRANT OPTION;

CREATE USER 'bak'@'127.0.0.1' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'bak'@'127.0.0.1' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO 'bak'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;

CREATE USER 'bak'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'bak'@'localhost' WITH GRANT OPTION;

//立即生效
flush privileges;

时区错误

解决办法非常的简单,手动明确指定 MySQL 数据库的时区,不使用引发误解的 CST:
临时生效:
mysql> set global time_zone = '+08:00';
Query OK, 0 rows affected (0.00 sec)

mysql> set time_zone = '+08:00';
Query OK, 0 rows affected (0.00 sec)

永久生效(修改后需要重启mysql):
修改 my.cnf 文件,在 [mysqld] 节下增加 default-time-zone = '+08:00'

其他

//用户查询
select user,host from mysql.user;

//密码验证相关
show variables like '%validate_password%';

//登录失败处理
show variables like '%connection_control%';

//默认最大密码有效天数
show variables like '%default_password_lifetime%';

//安全审计
show variables like '%general_log%';

show variables like '%log_bin%';

show variables like '%slow_query_log%';

//数据库加密连接
show variables like 'require_secure_transport';

//据库超时时间、锁定等待超时时间过大

show variables like 'lock_wait_timeout';

show variables like 'wait_timeout';

//数据库最大错误连接次数过大
show variables like 'max_connect_errors';
©2019 Somore 豫ICP备19009951号 sqlixiaoli@163.com