环境
- CentOS 7.5
- Docker 1.13.1
- MySQL 8.0.16
安装
拉取镜像
默认拉取最新版本的镜像
docker pull mysql
如果要指定版本,使用下面的命令
$ docker pull mysql 目前是8.0.25版本
创建数据目录和配置文件
在宿主机创建放置mysql的配置文件的目录和数据目录,并且进行授权
mkdir -p /usr/mysql/conf /usr/mysql/data $ chmod -R 755 /usr/mysql/
创建配置文件
在上面创建的配置文件目录/usr/mysql/conf下创建MySQL的配置文件my.cnf
vim /mnt/mysql/my.cnf
添加以下内容到上述创建的配置文件中
[cient]
#socket = /usr/mysql/mysqld.sock
default-character-set = utf8mb4
[mysql]
default-character-set= utf8mb4
[mysqld]
default-time-zone=Asia/Shanghai
#pid-file = /var/run/mysqld/mysqld.pid
#socket = /var/run/mysqld/mysqld.sock
#datadir = /var/lib/mysql
#socket = /usr/mysql/mysqld.sock
#pid-file = /usr/mysql/mysqld.pid
datadir = /usr/mysql/data
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake
character_set_server = utf8mb4
# default-character-set=utf8mb4
# character_set_system=utf8mb4
collation_server = utf8mb4_bin
secure-file-priv= NULL
lower_case_table_names=1
default_authentication_plugin= mysql_native_password
innodb_large_prefix = ON
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
# SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet = 128M
# MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
# MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
# 内部内存临时表的最大值 ,设置成128M。
# 比如大数据量的group by ,order by时可能用到临时表,
# 超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 134217728
max_heap_table_size = 134217728
# mysql binlog日志文件保存的过期时间,过期后自动删除
expire_logs_days = 5
max_connections = 3000
mysqlx_max_connections=800
innodb_flush_log_at_trx_commit=2
sync_binlog=500
- /etc/localtime:/etc/localtime:ro 是让容器的时钟与宿主机时钟同步,避免时区的问题,ro是read only的意思,就是只读。
启动创建容器
$ docker run --restart=unless-stopped -d --name mysql -v /mnt/my.cnf:/etc/mysql/my.cnf -v /usr/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
参数解释:
-v : 挂载宿主机目录和 docker容器中的目录,前面是宿主机目录,后面是容器内部目录-d : 后台运行容器
-p 映射容器端口号和宿主机端口号
-e 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码
执行上述命令后,执行查询容器的命令就可以看到创建的mysql容器
$ docker ps -a
结果如下所示:
问题
上述虽然安装好了mysql,但是使用远程的Navicat连接时提示错误,不能正确连接mysql,此时需要修改按照下面说的步骤修改一下mysql的密码模式以及主机等内容才可以。
修改mysql密码以及可访问主机
- 进入容器内部
$ docker exec -it mysql /bin/bash
- 连接mysql
$ mysql -uroot -p
- 使用mysql库
$ mysql> use mysql
- 修改访问主机以及密码等,设置为所有主机可访问
查看加密方式
select host,user,plugin,authentication_string from mysql.user;
3.修改数据库
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
4.重新修改密码后可连接成功
mysql> alter user 'root'@'%' identified by '123456'; // 注意这里是修改的远程密码。
注意:
mysql_native_password,mysql8.x版本必须使用这种模式,否则navicate无法正确连接
- 刷新
$ mysql> flush privileges
经过以上步骤,再次远程使用Navicat连接数据库时就可以正常连接了。
修改配置文件:
vim /usr/lib/sysctl.d/00-system.conf
追加
net.ipv4.ip_forward=1
接着重启网络
[root@localhost mytomcat]# systemctl restart network
其他配置
[mysqld]
default_authentication_plugin=mysql_native_password //修改密码加密方式
log-bin-trust-function-creators=1 //防止function函数无法创建
binlog_expire_logs_seconds=604800 //7天日志会被清除,保证日志文件不会过大
innodb_file_per_table //每个表一个文件存储
innodb_flush_log_at_trx_commit = 2 //bin日志写入方式,尽量保证性能优先
lower_case_table_names=1 //表名等信息大小写不敏感
group_concat_max_len=1M //group_concat可以拼接的最大长度
log_output=table,file //将慢查询的SQL写入文件和表(mysql.slow.log)
long_query_time = 2 //指定慢查询的阀值
port=3306 //端口号
basedir=D:/zhaoyi/abiz_aeps/etc/mysql //mysql安装目录(需根据实际情况修改)
datadir=D:/zhaoyi/abiz_aeps/etc/mysql/data //data目录的路径(需根据实际情况修改)
character_set_server=utf8mb4 //指定编码格式
default-storage-engine=INNODB //设置默认引擎
explicit_defaults_for_timestamp=true //解决时间戳不能为00-00 00:00:00的问题
connect_timeout=600
wait_timeout=600
max_connections=3000 //最大连接数
sql_mode= //sql的语法模式
ngram_token_size=1//ngram的最小分词
ft_min_word_len=1//mysql的最小索引长度
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
引用:
使用Navicat连接MySql8.0版本远程数据库_csdn非非非非的博客-CSDN博客