说明: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