简介

MySQL是一个流行的开源关系型数据库管理系统(RDBMS)。它使用了一种名为Structured Query Language(SQL)的语言进行数据操作和管理。MySQL由瑞典公司MySQL AB开发,后来被Sun Microsystems收购,最终被甲骨文公司(Oracle Corporation)收购。MySQL是一个广泛应用于Web开发的数据库系统,它可以与许多编程语言(如PHP、Python、Java等)配合使用,同时也是许多流行的内容管理系统(如WordPress、Drupal、Joomla等)的基础。

MySQL具有以下主要特点:

开源:MySQL是一个开源项目,可以免费使用和修改。
跨平台:MySQL可以在多种操作系统上运行,包括Windows、Linux、macOS等。
性能优越:MySQL具有优秀的性能,可以处理大量数据和并发连接。
易用性:MySQL安装简单,使用方便,提供了丰富的文档和社区支持。
灵活性:MySQL支持多种存储引擎,如InnoDB、MyISAM等,可以根据需要选择不同的存储引擎。
事务支持:MySQL提供了事务处理功能,可以保证数据的一致性和完整性。
复制和集群:MySQL提供了复制和集群功能,可以实现数据的高可用性和扩展性。

拉取镜像

注意:如果不指定版本默认是最新版本,可根据需求拉取固定版本。

docker pull mysql
bash

启动临时容器

启动临时容器的目的主要是为后面步骤的安装挂载目录做准备工作,临时用容器后面步骤会删除。

# 命令解释 docker run -p 宿主端口:容器端口 --name 容器名 -e root用户名属性=密码 -d 镜像名
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
bash

创建挂载目录

本教程中将MySQL相关配置以及数据库都将挂载到/home/mysql目录下;挂载的目的是为了数据持久化,防止容器删除后数据库的数据以及配置全部丢失。

# 创建挂载目录
mkdir /home/mysql

# 拷贝容器中的目录文件到宿主/home/mysql目录下
docker cp  mysql:/etc/mysql /home/mysql
# docker cp 容器名:容器内目录 宿主目录
bash

删除临时容器

# 命令解释 docker rm -f 容器名或容器Id
docker rm -f mysql
bash

配置MySQL

进入/home/mysql/mysql/conf.d/目录,新建my.cnf文件

# 进入配置目录下
cd /home/mysql/mysql/conf.d/

# 编辑配置
vim my.cnf
bash

将以下配置复制到my.cnf文件中

[mysqld]
# 限制MySQL内存占用
#performance_schema_max_table_instances=100
#table_definition_cache=100
#table_open_cache=64
#performance_schema=off

# 设置3306端口
port=3306
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
bash

创建容器

注意修改MYSQL_ROOT_PASSWORD的值,MYSQL_ROOT_PASSWORD设置的是MySQL数据库root的初始密码。

docker run \
-p 3306:3306 \
--name mysql8 \
--privileged=true \
--restart always \
-v /home/mysql/mysql:/etc/mysql \
-v /home/mysql/logs:/logs \
-v /home/mysql/data:/var/lib/mysql \
-v /etc/localtime:/etc/localtime \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
bash

命令中的--name mysql8 设置的容器名,-d mysql是容器引用的镜像名。
执行成功后可通过命令查看容器运行状态

docker ps -a
bash

image.png

修改配置

进入MySQL容器修改MySQL配置

# 命令解释 docker exec -it 容器名或容器Id bash
docker exec -it mysql8 bash
bash
  1. 进入MySQL客户端
mysql -u root -p
bash

密码为上文创建容器设置的MYSQL_ROOT_PASSWORD的值。

image.png
2. 设置root允许远程连接

依次执行以下命令

grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;
bash
use mysql
bash
update user set host='%' where user='root';
sql

如果更新时提示一下错误
image.png

可通过SQL语句查询root是否已经被修改,如果和下图一样,表示无需修改了。

select host,user from user where user='root';
sql

image.png

设置可远程连接

grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;


ALTER user 'root'@'%' IDENTIFIED BY 'root用户的密码' PASSWORD EXPIRE NEVER;


ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root用户的密码';


FLUSH PRIVILEGES;

bash

结束

到此,MySQL就安装成功了,这时可通过Navicat连接数据了。