#!/bin/bash
function backup_create_daemon_json() {
local daemon_json_file="/etc/docker/daemon.json"
local backup_dir="/etc/docker/daemon_json_backup"
local daemon_json_content='{"insecure-registries": ["192.168.1.144:8083", "192.168.1.144:8082"]}'
if ! sudo -n true 2>/dev/null; then
echo "脚本需要sudo权限才能操作文件,请确保脚本以sudo或root身份运行。"
exit 1
fi
echo "检查daemon.json文件是否存在"
if [ -f "$daemon_json_file" ]; then
local backup_date=$(date "+%Y-%m-%d_%H-%M-%S")
local backup_file="$backup_dir/daemon.json_$backup_date"
if ! mkdir -p "$backup_dir"; then
echo "创建备份目录失败,请检查目录权限或路径设置。"
exit 1
fi
sudo cp "$daemon_json_file" "$backup_file"
echo "检查已存在,备份原有的daemon.json文件为 $backup_file"
else
echo "daemon.json文件不存在,直接新增"
fi
echo "$daemon_json_content" | sudo tee /etc/docker/daemon.json > /dev/null
echo "成功新增daemon.json文件"
echo "重新加载daemon.json配置"
sudo systemctl daemon-reload
echo "重启 Docker 以使daemon.json配置生效"
sudo systemctl restart docker
sleep 5
docker login 192.168.1.144:8083 -u admin -p 3edc\$RFVs
echo "成功登录docker私库"
if ! docker images | awk -v image="192.168.1.144:8083/mysql" -v tag="5.7.36" '$1 == image && $2 == tag { found = 1; exit } END { exit !found }'; then
if docker pull 192.168.1.144:8083/mysql:5.7.36; then
echo "成功从私库中拉取镜像 192.168.1.144:8083/mysql:5.7.36"
else
echo "从私库中拉取镜像失败,请检查私库地址和镜像是否正确。"
exit 1
fi
else
echo "本地已存在相同版本的镜像 192.168.1.144:8083/mysql:5.7.36,跳过拉取镜像步骤。"
fi
}
function run_container() {
local backup_dir="/opt/docker/mysql"
if ! mkdir -p "$backup_dir"; then
echo "创建备份目录失败,请检查目录权限或路径设置。"
exit 1
fi
cat <<EOF > $backup_dir/my.cnf
[mysqld]
server-id=10
symbolic-links=0
character-set-server = utf8
collation-server = utf8_general_ci
lower_case_table_names=1
log-bin-trust-function-creators=1
group_concat_max_len = 102400
log_bin = mysql-bin
binlog_format = ROW
slave_skip_errors=all
read-only=0
relay_log=mysql-relay-bin
log-slave-updates=on
auto-increment-offset=1
auto-increment-increment=2
skip-external-locking
skip-name-resolve
expire_logs_days = 10
open_files_limit = 10240
back_log = 600
max_connections=10000
max_connect_errors = 6000
wait_timeout=605800
max_allowed_packet = 1000M
table_open_cache = 400
tmp_table_size = 256M
max_heap_table_size = 256M
read_buffer_size = 8M
read_rnd_buffer_size = 256K
net_buffer_length = 2K
thread_stack = 256K
myisam_sort_buffer_size = 2M
innodb_buffer_pool_size = 32M
innodb_log_file_size = 8M
innodb_log_buffer_size = 8M
query_cache_type = 1
query_cache_size = 256M
query_cache_limit = 2M
query_cache_min_res_unit = 16k
bulk_insert_buffer_size = 64M
default-storage-engine = INNODB
innodb_flush_method = O_DIRECT
long_query_time= 2
slow-query-log = on
slow-query-log-file = /var/log/mysql/mysql-slow.log
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
[mysqldump]
quick
max_allowed_packet = 1000M
EOF
echo "已成功创建my.cnf"
docker run -d --name=mysql --restart=always -p 3306:3306 -e TZ=Asia/Shanghai -e MYSQL_ROOT_PASSWORD="3edc\$RFV" -v /opt/docker/data/mysql:/var/lib/mysql -v /opt/docker/mysql/my.cnf:/etc/mysql/my.cnf 192.168.1.144:8083/mysql:5.7.36
sleep 10
if docker ps -a | grep -q mysql; then
echo "容器启动成功!"
else
echo "容器启动失败,请检查日志和配置。"
fi
}
function check_and_restore() {
if [ -f /etc/docker/daemon_json_backup/daemon.json_* ]; then
cp /etc/docker/daemon_json_backup/daemon.json_* /etc/docker/daemon.json
rm -rf /etc/docker/daemon_json_backup
systemctl restart docker
fi
docker ps
}
backup_create_daemon_json
run_container
check_and_restore