docker 安装mysql,共享宿主机容器卷

464 阅读5分钟

说明:docker 安装mysql,共享宿主机容器卷。宿主机已经占用3306,所以docker容器msyql配置文件使用3307端口。

一、搜索镜像并pull

[root@localhost data]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@localhost data]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
for/redis     6.0       97444718c215   3 weeks ago    109MB
redis         latest    7614ae9453d1   5 months ago   113MB
mysql         5.7       c20987f18b13   5 months ago   448MB

二、启动容器

命令:

docker run -p 3307:3306 --privileged=true -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf/:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name formysql -d mysql:5.7

[root@localhost mysql]# docker run -p 3307:3306 --privileged=true -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf/:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name formsyql -d mysql:5.7
7cc724b49b4a5f3724a322d33449060d64c7b2d182a3a09d3afca471d720440d
[root@localhost mysql]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
7cc724b49b4a   mysql:5.7   "docker-entrypoint.s…"   5 seconds ago   Up 4 seconds   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   formsyql
d536dd728243   redis       "docker-entrypoint.s…"   5 hours ago     Up 2 hours     6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp    forredis2

命令解析:

docker run -p 3307:3306

--privileged=true

-v /docker/mysql/log:/var/log/mysql

-v /docker/mysql/data:/var/lib/mysql

-v /docker/mysql/conf/:/etc/mysql/conf.d

-e MYSQL_ROOT_PASSWORD=123456

--name formsyql -d

mysql:5.7

三、修改配置

1.查看字符集编码为utf8

mysql> show variables like "character%";
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)在

2.修改字符集编码为utf8,在宿主机目录下创建my.cnf

[root@localhost conf]# pwd
/docker/mysql/conf
[root@localhost conf]# cat my.cnf
[client]
default_character_set = utf8
password       = 123456
port            = 3307

[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

3.重启容器,查看字符编码集

mysql> show variables like "character%"
    -> ;
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

4.创建测试库表,插入数据,其中汉字内容是通过Navicat链接 192.168.2.252 3307后插入的

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed
mysql> create table user (id int(8),name varchar(20));
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user           |
+----------------+
1 row in set (0.00 sec)

mysql> insert into user values(1,'forpastime');
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+------+------------+
| id   | name       |
+------+------------+
|    1 | forpastime |
+------+------------+
1 row in set (0.00 sec)

mysql> select * from user;
+------+------------+
| id   | name       |
+------+------------+
|    1 | forpastime |
|    2 | 言忠信     |
+------+------------+
2 rows in set (0.00 sec)

四、宿主机数据同步确认

1.删除容器实例

[root@localhost mysql]# docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS                                                  NAMES
1c67e9f4693b   mysql:5.7   "docker-entrypoint.s…"   22 minutes ago   Up 22 minutes   33060/tcp, 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp   formysql
d536dd728243   redis       "docker-entrypoint.s…"   5 hours ago      Up 2 hours      6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp    forredis2
[root@localhost mysql]# docker rm -f formysql
formysql
[root@localhost mysql]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                                                 NAMES
d536dd728243   redis     "docker-entrypoint.s…"   5 hours ago   Up 2 hours   6379/tcp, 0.0.0.0:6380->6380/tcp, :::6380->6380/tcp   forredis2

2.重启mysql容器并进入/bin/bash

[root@localhost mysql]# docker run -p 3307:3306 --privileged=true -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/data:/var/lib/mysql -v /docker/mysql/conf/:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name formysql -d mysql:5.7
c68e431e7a2d803214f0dafb9b0eb5824232d9ef642d1b0e01a22538673207a1
[root@localhost mysql]# docker exec -it formysql /bin/bash

3.查看数据库表信息

root@c68e431e7a2d:/# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.36 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> use test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from user;
+------+------------+
| id   | name       |
+------+------------+
|    1 | forpastime |
|    2 | 言忠信     |
+------+------------+
2 rows in set (0.00 sec)

数据均在,说明共享容器卷完成!

附:完整的my.cnf

宿主机已经占用3306,所以docker容器msyql配置文件使用3307端口

[client]
default_character_set = utf8
password       = 123456
port            = 3307

socket          = /tmp/mysql.sock

[mysqld]
port            = 3307
socket          = /tmp/mysql.sock
datadir = /docker/mysql/data
default_storage_engine = InnoDB
performance_schema_max_table_instances = 400
table_definition_cache = 400
skip-external-locking
key_buffer_size = 128M
max_allowed_packet = 100G
table_open_cache = 512
sort_buffer_size = 2M
net_buffer_length = 4K
read_buffer_size = 2M
read_rnd_buffer_size = 256K
myisam_sort_buffer_size = 32M
thread_cache_size = 64
query_cache_size = 64M
tmp_table_size = 64M
sql-mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

explicit_defaults_for_timestamp = true
#skip-name-resolve
max_connections = 500
max_connect_errors = 100
open_files_limit = 65535

log-bin=mysql-bin
binlog_format=mixed
server-id = 2
expire_logs_days = 10
slow_query_log=1
slow-query-log-file=/docker/mysql/data/mysql-slow.loglong_query_time=3
#log_queries_not_using_indexes=on
early-plugin-load = ""

#错误日志文件
log-error=mysql-error

#主从复制
#replicate-do-db = boundlessz_server
replicate-do-db = test

innodb_data_home_dir = /docker/mysql/datainnodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /docker/mysql/datainnodb_buffer_pool_size = 512M
innodb_log_file_size = 256M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
innodb_max_dirty_pages_pct = 90
innodb_read_io_threads = 4
innodb_write_io_threads = 4

[mysqldump]
quick
max_allowed_packet = 500M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 2M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout