后面一些基础设施需要使用mysql作为数据库,所以这里我们提前安装一下。
1、mysql5.7配置文件
这里贴出笔者在测试环境中的mysql配置文件,如果读者有自己的配置文件可以使用自己的。
# vim /data/mysql-01/conf/my.cnf
[client]
port= 3306
socket = /tmp/mysql.sock
#default-character-set = utf8mb4
## The MySQL server
[mysqld]
port = 3306
socket = /tmp/mysql.sock
user = mysql
skip-external-locking
skip-name-resolve
#skip-grant-tables
#skip-networking
###################################### dir
#basedir=/usr/local/mysql
datadir=/var/lib/mysql
tmpdir=/var/lib/mysql
secure_file_priv=/var/lib/mysql
###################################### some app
log-error=mysql.err
pid-file=/var/lib/mysql/mysql.pid
local-infile=1
event_scheduler=0
federated
default-storage-engine=InnoDB
#default-time-zone= '+8:00'
log_timestamps=SYSTEM
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
#5.6
explicit_defaults_for_timestamp=true
#fulltext
innodb_optimize_fulltext_only
ft_min_word_len=1
#ft_max_word_len
innodb_ft_min_token_size=1
###################################### memory allocate and myisam configure
max_connections=3000
#back_log=200
max_connect_errors=10000
key_buffer_size = 16M
max_allowed_packet = 16M
table_open_cache = 10240
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
join_buffer_size=2M
myisam_sort_buffer_size = 4M
#net_buffer_length = 2M
thread_cache_size = 24
query_cache_type=1
query_cache_size=256M
query_cache_limit=32M
tmp_table_size=1G
max_heap_table_size=1G
#thread_concurrency =48
###################################### replication
server-id = 10951
log-bin=mysql-bin
binlog_format=mixed
max_binlog_size=1G
#binlog_cache_size=512M
log_slave_updates=true
log_bin_trust_function_creators=true
expire_logs_days=15
replicate-ignore-db=mysql
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%
replicate-wild-ignore-table=performance_schema.%
lower_case_table_names = 1
#read_only=1
master_info_repository=TABLE
relay_log_info_repository=TABLE
###################################### slow-query
long_query_time=1
slow_query_log=1
slow_query_log_file=/var/lib/mysql/slow-query.log
interactive_timeout=600
wait_timeout=600
#log_queries_not_using_indexes=1
###################################### innodb configure
innodb_file_per_table
#innodb_file_format=Barracuda
#innodb_io_capacity=200
innodb_data_home_dir = /var/lib/mysql
#innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size =4G
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
innodb_log_buffer_size = 32M
#innodb_lock_wait_timeout = 50
innodb_flush_log_at_trx_commit = 1
sync_binlog=0
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
##########################################
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
default-character-set = utf8mb4
prompt=\\U \\h \\R:\\m:\\s \\d>
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
2、准备阶段
⚠️在test-node-1上操作
# 配置文件映射目录
mkdir -p /data/mysql-01/conf
# 数据持久化映射目录
mkdir -p /data/mysql-01/data
# 把上面的配置文件复制进入
vim /data/mysql-01/conf/my.cnf
3、安装mysql5.7
⚠️这里要注意下时间要和宿主机同步,可以挂载宿主机的/etc/localtime
到容器内部。
⚠️数据库的ROOT密码是通过环境变量传递给容器内部的。
docker run -d \
--privileged=true \
--network app_network \
-p 3306:3306 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/mysql-01/data:/var/lib/mysql \
-v /data/mysql-01/conf:/etc/mysql/conf.d \
-v /data/mysql-01/conf/my.cnf:/etc/mysql/my.cnf \
--env MYSQL_ROOT_PASSWORD=123456 \
--name mysql5.7-01 mysql:5.7
4、验证
这里我们使用数据库连接工具连接测试下。
5、使用已有数据启动容器
有时候难免会出现容器损坏等等情况,那么我们可以删掉容器重新创建,并且还原数据。下面的命令就是使用已有数据进行启动:
docker run -p 3306:3306 \
--privileged=true \
--network app_network \
--name mysql5.7 \
-v /etc/localtime:/etc/localtime:ro \
-v /data/mysql-01/data:/var/lib/mysql \
-v /data/mysql-01/conf:/etc/mysql/conf.d \
-v /data/mysql-01/conf/my.cnf:/etc/mysql/my.cnf \
-d mysql:5.7
现在你可以尝试把正在运行的mysql实例直接删除,然后从这段命令重新启动一个试试。
6、小结
在这一节,我们在docker中启动了一个mysql实例。在docker中运行mysql实例性能会比直接在宿主机上运行差一些,但是比较好管理,而且可以很方便的创建出多个mysql实例,特别适合测试环境。