Ubuntu20.04云服务器——Mysql部署&emqx-mysql认证配置
1. Mysql部署
-
创建docker-compose.yml文件
version: '3' services: mysqldb: # 镜像名 image: mysql:5.7 # 容器名(以后的控制都通过这个) container_name: mysql57 # 重启策略 restart: always environment: # 时区上海 TZ: Asia/Shanghai # root 密码 MYSQL_ROOT_PASSWORD: password # 初始化数据库 MYSQL_DATABASE: database # 初始化用户 MYSQL_USER: user1 # 用户密码 MYSQL_PASSWORD: 123456 # 映射端口 ports: - 3306:3306 volumes: # 数据挂载 - ~/mysql/mysql/data/:/var/lib/mysql/ # 配置挂载 - ~/mysql/mysql/conf/:/etc/mysql/conf.d/ # 初始化目录挂载 - ~/mysql/mysql/init/:/docker-entrypoint-initdb.d/ command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1
-
docker compose部署mysql
sudo docker-compose -f docker-compose.yml up -d
-
下载mysql客户端
sudo apt install mysql-client-core-8.0
-
在终端访问mysql
mysql -u user1 -h 127.0.0.1 -p Enter password:123456
2. emqx配置mysql密码认证
-
创建数据库emqx
create database emqx; use emqx;
-
创建数据表
password_hash
: 必需,数据库中的明文或散列密码字段salt
: 可选,为空或不存在时视为空盐(salt = ""
)is_superuser
: 可选,标记当前客户端是否为超级用户,默认为false
CREATE TABLE `mqtt_user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL, `password_hash` varchar(100) DEFAULT NULL, `salt` varchar(35) DEFAULT NULL, `is_superuser` tinyint(1) DEFAULT 0, `created` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `mqtt_username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-
添加一名用户名为
admin
、密码为public
、盐值为slat_foo123
、散列方式为sha256
且超级用户标志为true
的用户INSERT INTO mqtt_user(username, password_hash, salt, is_superuser) VALUES ('admin', SHA2(concat('public', 'slat_foo123'), 256), 'slat_foo123', 1);
-
web端访问emqx
http://x.x.x.x:18083
-
点击客户端认证,点击创建,选择Password-Based,点击下一步,选择Mysql,点击下一步,配置参数。
服务:x.x.x.x:3306 数据库:emqx 用户名:root 密码:password
点击创建,mysql密码认证配置完成。