测试环境:腾讯云+ubuntu20
1 拉取镜像
docker pull mariadb
2. 启动mariadb容器
2.1 创建宿主机存放mariadb数据的文件夹并创建容器
[root@localhost docker]# mkdir -p mariadb/data mariadb/logs mariadb/data
[root@localhost docker]# cd mariadb
[root@localhost mariadb]# ls
data logs data
[root@localhost mariadb]# docker run --name mariadb -d -i -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mariadb
a038a278a3db1c67a41ef54b95fd894e3e5965423961304bf893c45cc0498144
[root@localhost mariadb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a038a278a3db mariadb "docker-entrypoint.s…" 2 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mariadb
2.2 进入容器
[root@localhost mariadb]# docker exec -it mariadb /bin/bash
root@a038a278a3db:/#
docker默认安装mysql后端口没有映射到宿主机器,而且用户root只允许localhost本机登录,因此要做相应设置。
(1)查看docker 镜像
ubuntu@VM-16-9-ubuntu:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d28ff9bb1947 seafileltd/seafile-mc:latest "/sbin/my_init -- /s鈥 54 minutes ago Up 54 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp seafile
80d998f7cd2a memcached:1.5.6 "memcached -m 256" 54 minutes ago Up 54 minutes 11211/tcp seafile-memcached
d8f3556cd7e0 mariadb:10.5 "docker-entrypoint.s鈥 54 minutes ago Up 54 minutes 3306/tcp seafile-mysql
可见mariadb服务端口没有映射到宿主机器,所有我们第一步设置docker镜像的端口映射:
docker run -itd -p 3306:3306 seafile-mysql /bin/bash
这里指定的seafile-mysql是镜像名称,该命令为
③HOSTPORT:CONTAINERPORT
:未指定ip、指定宿主机port、指定容器port
- 适用于将容器指定端口指定映射到宿主机的一个端口上(映射所有接口地址)
其他指定端口的方式还有:
①IP:HOSTPORT:CONTAINERPORT:指定ip、指定宿主机port、指定容器port
适用于映射到指定地址的指定端口
eg:将容器的5000端口映射到指定地址127.0.0.1的5000端口上:
docker run -it -d -p 127.0.0.1:5000:5000 docker.io/centos:latest /bin/bash
②IP::CONTAINERPORT:指定ip、未指定宿主机port(随机)、指定容器port
适用于映射到指定地址的任意端口
eg:将容器的4000端口映射到127.0.0.1的任意端口上:
docker run -it -d -p 127.0.0.1::4000 docker.io/centos:latest /bin/bash
查看映射端口配置
命令:
docker port CONTAINER_ID
登录到容器中设置数据库。
(1)登录到容器中
docker exec -it mariadb /bin/bash
(2)登录mysql
use mysql
查看user表的 host,user,passwd字段
MariaDB [mysql]> select host ,user ,password from user;
+-----------+-------------+-------------------------------------------+
| Host | User | Password |
+-----------+-------------+-------------------------------------------+
| localhost | mariadb.sys | |
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| % | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+-------------+-------------------------------------------+
3 rows in set (0.001 sec)
(3)修改用户登录设置等
由于10以上版本的mysql.user是视图而不是表,因此不支持传统的修改命令,官方建议通过删除、新建的方式来维护用户。
一、创建一个测试数据库
-- 创建数据库
CREATE DATABASE test;
二、创建一个本地访问数据库的账户
-- 创建用户
CREATE USER 'username' @ 'localhost' IDENTIFIED BY 'password';
1. 参数解释:
username:数据库访问的账户;
localhost:数据库的访问方式,外网访问的时候用%替换localhost即可;
password:数据库访问密码,此处输入密码明文;
三、给测试账户分配权限
1. 分配所有权限
-- 给用户分配所有的权限,并且通过localhost访问
GRANT ALL ON test.* to username @ 'localhost' IDENTIFIED BY 'password';
FLUSH privileges;
-- 给账户分配部分的权限,并且通过外网访问
GRANT insert,delete,select,update ON test.* to username @ '%' IDENTIFIED BY 'password';
FLUSH privileges;
–或则采用下面的代码,除了操作权限授权外,还赋予授权的权限,授权权限未验证过
GRANT ALL ON test.* to username @ ‘%’ IDENTIFIED BY ‘passowrd’ WITH GRANT OPTION;
FLUSH privileges;
如果只是对某一张表进行授权的话,直接把test.* 的 星号替换成表名称即可