MirrorYuChen
MirrorYuChen
Published on 2025-03-07 / 15 Visits
0
0

MySQL使用Docker部署

MySQL使用Docker部署

1.拉取docker镜像

>> sudo docker pull mysql:8

2.后台启动mysql容器

>> sudo docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8 

3.连接mysql数据库

# 1.-p 后直接输入密码,则不可加空格,并在此输入密码,密码会显示出来
>> sudo docker exec -it mysql mysql -uroot -p123456
# 2.-p后按回车,命令行窗口就会自动跳到下一行
>> sudo docker exec -it mysql mysql -u root -p

4.创建数据库

mysql> create database webdb;
Query OK, 1 row affected (0.01 sec)

5.开启插件

5.1 开启插件mysql_native_password

# 1.进入docker容器
>> sudo docker exec -it mysql bash
# 2.将容器中的配置文件拷贝出来
>> sudo docker cp mysql:/etc/my.cnf ./my.cnf
Successfully copied 2.56kB to /home/mirror/my.cnf
# 3.编辑my.cnf文件
>> vim ./my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.4/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
mysql_native_password=ON

host-cache-size=0
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/

# 4.拷贝回去
>> sudo docker cp ./my.cnf mysql:/etc/my.cnf
# 5.重启容器
>> sudo docker restart mysql
81089995e329

6.添加用户,并给予数据库权限

# 1.创建用户并开启登录权限
mysql> CREATE USER 'mirror'@'%' IDENTIFIED WITH mysql_native_password BY 'cjy';
Query OK, 0 rows affected (0.01 sec)
# 2.将webdb数据库所有权限开放给用户mirror
mysql> GRANT ALL PRIVILEGES ON webdb.* TO 'mirror'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)
# 3.刷新生效
mysql> FLUSH PRIVILEGES; 
Query OK, 0 rows affected (0.01 sec)
# 4.给用户mirror数据库webdb访问权限
mysql> grant all on webdb.user to 'mirror'@'%';
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 5.刷新权限,使之生效
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

​ 后续需要删除用户,可以使用如下命令:

mysql> DROP USER IF EXISTS 'mirror'@'%';
Query OK, 0 rows affected (0.01 sec)

​ 如果需要给用户所有数据库权限:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'mirror'@'%' WITH GRANT OPTION;

​ 用户登录权限修改语句:

# 1.修改用户登录权限
mysql> UPDATE mysql.user SET Host = 'localhost' WHERE User = 'mirror' AND Host = '%';
mysql> FLUSH PRIVILEGES;
# 2.查看用户登录权限
mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| mirror           | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

7.使用Navicat工具创建表

7.1 登录MySQL数据库

"文件" -> "新建" -> "MySQL..."->填写相关配置:

连接名:local
主机:localhost
端口:3306
用户名:mirror
密码:cjy

​ 点击"测试连接" -> "确定"即可。

7.2 创建表

  • (a) 创建表:左键单击"webdb" -> 右键单击"表" -> "新建表" -> 使用"添加字段" 、"插入字段"和"删除字段"来添加或删除表字段,得到表结果。
  • (b) 导出对应sql语句:右键单击创建表名 -> 左键单击"转储SQL文件" -> 选择"仅结构"或"结构和数据"就可以得到对应sql文件。
/*
 Navicat Premium Data Transfer

 Source Server         : DockerMirror
 Source Server Type    : MySQL
 Source Server Version : 80404
 Source Host           : localhost:3306
 Source Schema         : webdb

 Target Server Type    : MySQL
 Target Server Version : 80404
 File Encoding         : 65001

 Date: 07/03/2025 11:44:11
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `user_id` bigint UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户id',
  `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户名',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用户密码',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

参考资料


Comment