Hexo

点滴积累 豁达处之

0%

docker搭建MySQL

docker搭建MySQL

下载镜像

1
docker pull mysql:5.7

挂载和配置文件

1
2
3
4
5
6
# 新建MySQL数据目录
mkdir -p /usr/local/volume/mysql/data
# 新建MySQL日志目录
mkdir -p /usr/local/volume/mysql/log
# 新建MySQL配置文件目录
mkdir -p /usr/local/volume/mysql/conf

新建并编辑配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 新建并编辑配置文件
vi /usr/local/volume/mysql/conf/my.cnf

# 编辑内容
[client]
#该目录下的内容常用来进行localhost登陆,一般不需要修改
# 端口号
port = 3306

[mysql]
#包含一些客户端mysql命令行的配置
# 默认不自动补全 auto-rehash自动补全
auto-rehash

[mysqld]
#mysql优化的配置目录,除硬件和环境配置外,全部优化在此配置,一般服务器安装只有此配置目录
#默认启动用户,一般不需要修改,可能出现启动不成功
user = mysql
#端口号
port = 3306
#设置数据库服务器默认编码 utf-8
character-set-server = utf8
#数据库目录,数据库目录切换时需要用到
#datadir =/var/lib/mysql
#mysql进程文件,可指定自己的进程文件
#pid-file =/var/log/mysql/mysqld.pid
#外部锁定(非多服务器可不设置该选项,默认skip-external-locking)
#external-locking = FALSE
#跳过外部锁定 (避免多进程环境下的external locking 锁机制)
#skip-external-locking
#跳过主机名解析,直接IP访问,可提升访问速度
#skip-name-resolve
#错误日志文件
#log-error =/var/log/mysql/mysqld.log
#默认为1,表示启用警告信息记录日志,不需要置0即可,大于1时表示将错误或者失败连接记录日志
#log-warnings
#全局只读变量,文件描述符限制 注:上限其实为OS文件描述符上限,小于OS上限时生效 可用lsof查看限制并修改相应配置
#open_files_limit = 10240
#mysql支持的基本语法及校验规则
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

启动

1
2
3
4
5
6
7
8
9
10
11
docker run -p 3306:3306 \
--name mysql \
-v /usr/local/volume/mysql/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/volume/mysql/log:/var/log/mysql \
-v /usr/local/volume/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=chen1208 \
-id mysql:5.7

--name # 设置容器名
-v # 挂载文件
-e MYSQL_ROOT_PASSWORD=chen1208 # 设置密码

授权

用户授权

1
2
3
4
5
6
7
8
mysql> grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option;

all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。
on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user
to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录
identified by:指定用户的登录密码
with grant option:表示允许用户将自己的权限授权给其它用户
可以使用GRANT给用户添加权限,权限会自动叠加,不会覆盖之前授予的权限,比如你先给用户添加一个SELECT权限,后来又给用户添加了一个INSERT权限,那么该用户就同时拥有了SELECT和INSERT权限。

刷新权限

对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。

1
mysql> flush privileges;

查看用户权限

1
2
mysql> grant select,create,drop,update,alter on *.* to 'qingsong'@'%' identified by 'qingsong' with grant option;
mysql> show grants for 'qingsong'@'%';

回收权限

删除qingsong这个用户的create权限,该用户将不能创建数据库和表。

1
2
mysql> revoke create on *.* from 'qingsong'@'%';
mysql> flush privileges;

删除用户

1
2
mysql> select host,user from user;
mysql> drop user 'qingsong'@'qingsong';

修改密码

语法:set password for ‘用户名’@’登录地址’=password(‘密码’)

1
mysql> set password for 'root'@'localhost'=password('123456');

忘记密码

1> 添加登录跳过权限检查配置
修改my.cnf,在mysqld配置节点添加skip-grant-tables配置

1
2
[mysqld]
skip-grant-tables

2> 重新启动mysql服务

1
shell> service mysqld restart

3> 修改密码
此时在终端用mysql命令登录时不需要用户密码,然后按照修改密码的第一种方式将密码修改即可。