写在前面
最近经常需要通过Docker部署单节点或集群的MySQL,所以简单写了一个部署脚本
创建脚本
创建目录
#创建目录
mkdir /opt/mysql && cd /opt/mysql
#编辑文件
vim run.sh
#!/bin/bash
#author: Anger
#自动部署MySQL容器脚本
docker version > /dev/null 2>&1
#判断是否安装docker
if [ $? != 0 ];then
echo "没安装docker,请安装docker后再执行"
exit 1
fi
#配置默认值
password=mysql123456
port=3306
#输入新变量
read -p "输入一个密码(默认密码:mysql123456)" repass
read -p "输入容器端口(默认为3306)" report
#如果变量不为空,则重新赋值给默认变量
if [ -n "${repass}" ];then
password=${repass}
fi
if [ -n "${report}" ];then
port=${report}
fi
#上面的判断也可以写成这样
#[ -n "${repass}" ] && password=${repass}
#[ -n "${report}" ] && port=${report}
#创建持久化目录
mkdir -p /data/mysql/{data,conf,log}
#复制文件到持久化目录
cp ./my.cnf /data/mysql/conf
#启动容器
docker run -d --name=mysql -p ${port}:3306 -v /data/mysql/data:/var/lib/mysql -v /data/mysql/log:/var/log/mysql -v /data/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=${password} -e TZ=Asia/Shanghai mysql:5.7
ipadd=$(ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}';)
#输出信息
echo "部署完成,地址为:${ipadd},默认用户名:root,密码为:${password},端口为:${port}"
备注:
获取网卡的位置有可能会报错,因为有些虚拟机的默认网卡不是eth0,可根据实际情况更改
创建my.cnf
#编辑文件
vim my.cnf
[mysqld]
port = 3306
bind-address = 0.0.0.0
server-id = 1
#basedir = /var/lib/mysql
#datadir = /var/lib/mysql/data
character-set-server = utf8mb4
skip-name-resolve
back_log = 300
max_connections = 1000
max_connect_errors = 6000
open_files_limit = 65535
table_open_cache = 128
max_allowed_packet = 500M
binlog_cache_size = 1M
max_heap_table_size = 8M
tmp_table_size = 16M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
sort_buffer_size = 8M
join_buffer_size = 8M
key_buffer_size = 4M
thread_cache_size = 8
query_cache_type = 1
query_cache_size = 8M
query_cache_limit = 2M
ft_min_word_len = 4
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 7
performance_schema = 0
explicit_defaults_for_timestamp
skip-external-locking
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_open_files = 500
innodb_buffer_pool_size = 64M
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 2M
innodb_log_file_size = 32M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
interactive_timeout = 28800
wait_timeout = 28800
lower_case_table_names = 1
#sql_mode =
binlog-ignore-db=mysql
log-bin=mysql-bin
expire-logs-days=10
slave_skip_errors=1062
#skip-grant-tables
[mysqldump]
quick
编辑完成后,为文件赋可执行权限和可读取权限
chmod +x run.sh && chmod 644 my.cnf
执行部署
接着执行脚本即可自动部署MySQL容器
bash run.sh