国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Docker】MySQL 源碼構(gòu)建 Docker 鏡像(基于 ARM 64 架構(gòu))

這篇具有很好參考價(jià)值的文章主要介紹了【Docker】MySQL 源碼構(gòu)建 Docker 鏡像(基于 ARM 64 架構(gòu))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

以下內(nèi)容均來(lái)自個(gè)人筆記并重新梳理,如有錯(cuò)誤歡迎指正!如果對(duì)您有幫助,煩請(qǐng)點(diǎn)贊、關(guān)注、轉(zhuǎn)發(fā)!歡迎掃碼關(guān)注個(gè)人公眾號(hào)!

arm docker mysql,Docker,docker,mysql,容器

?公眾號(hào)原文鏈接:MySQL 源碼構(gòu)建 Docker 鏡像(基于 ARM 64 架構(gòu))


背景介紹

近期,筆者正推進(jìn)公司 MySQL 適配 ARM 64 架構(gòu)工作,由于一直使用 Docker Hub 上的官方鏡像,所以第一時(shí)間在 Hub 上檢索,卻發(fā)現(xiàn)官方只為 MySQL 8.0 以上版本提供 ARM 64 鏡像。

為避免 MySQL 版本變動(dòng)帶來(lái)的研發(fā)改造成本,筆者最終決定針對(duì) MySQL 5.7.40 版本自行構(gòu)建 ARM 64 鏡像,以下為完整過(guò)程。


過(guò)程回顧

1、獲取 Dockerfile

使用 dfimage 工具獲取 MySQL 5.7.40 官方鏡像原始的 Dockerfile。

alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage"
dfimage -sV=1.36 mysql:5.7.40 > /root/mysql_rebuild/Dockerfile

這里需要說(shuō)明的是,該 Dockerfile 中是通過(guò) yum 安裝 mysql 服務(wù),經(jīng)過(guò)實(shí)測(cè)其指定的 yum 源也未提供 5.7.40 版本的 ARM 64 rpm文件,因此還需要使用源碼自行編譯生成 rpm,并修改 Dockerfile 中的安裝邏輯。

附 yum 源地址:https://repo.mysql.com/yum

2、編譯源碼生成 rpm

2.1、在 ARM 環(huán)境安裝依賴

yum install -y cmake time libaio-devel ncurses-devel numactl-devel openssl-devel zlib-devel \
cyrus-sasl-devel openldap-devel perl-Env gcc gcc-c++ make rpm-build autoconf perl-JSON

2.2、下載源碼 rpm 并安裝

wget https://repo.mysql.com/yum/mysql-5.7-community/docker/el/7/SRPMS/mysql-community-minimal-5.7.40-1.el7.src.rpm
rpm -ivh mysql-community-minimal-5.7.40-1.el7.src.rpm

2.3、修改源碼配置

cd /root/rpmbuild/SOURCES/
tar -xzvf mysql-5.7.40.tar.gz && rm -rf mysql-5.7.40.tar.gz
vim mysq1-5.7.40/sql/mysqld.cc,添加 #include
sed -i "s#-O3#-O1#g" mysql-5.7.40/cmake/build_configurations/compiler_options.cmake
tar -czvf mysql-5.7.40.tar.gz mysql-5.7.40 --remove-files

2.4、編譯源碼生成 rpm

rpmbuild -bb /root/rpmbuild/SPECS/mysql.spec

生成的 rpm 文件位于 /root/rpmbuild/RPMS/aarch64 目錄下

3、構(gòu)建鏡像

cd /root/mysql_rebuild && tree
目錄結(jié)構(gòu)如下,部分文件的詳細(xì)內(nèi)容見附錄:
├── Dockerfile
├── aarch64
│   ├── mysql-community-minimal-debuginfo-5.7.40-1.el7.aarch64.rpm
│   └── mysql-community-server-minimal-5.7.40-1.el7.aarch64.rpm
├── docker-entrypoint.sh
├── gosu
├── gosu.asc
├── my.cnf
└── mysql-shell-8.0.12-1.el7.aarch64.rpm

docker build --pull --platform=linux/arm64 -t mysql:5.7.40-armtest -f Dockerfile . --no-cache

附錄

1、Dockerfile

FROM oraclelinux:7-slim

CMD ["/bin/bash"]
RUN set -eux; groupadd --system --gid 999 mysql; useradd --system --uid 999 --gid 999 --home-dir /var/lib/mysql --no-create-home mysql
ENV GOSU_VERSION=1.14
# 此處提前將 gosu 原文件下載好,縮短構(gòu)建時(shí)間
# wget -O gosu.asc https://github.com/tianon/gosu/releases/download/1.14/gosu-arm64.asc
# wget -O gosu https://github.com/tianon/gosu/releases/download/1.14/gosu-arm64
COPY gosu.asc gosu /usr/local/bin
RUN set -eux; export GNUPGHOME="$(mktemp -d)"; gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; chmod +x /usr/local/bin/gosu; gosu --version; gosu nobody true; yum install -y --setopt=skip_missing_names_on_install=False oracle-epel-release-el7; yum install -y --setopt=skip_missing_names_on_install=False bzip2 gzip openssl xz zstd; yum clean all

ENV MYSQL_MAJOR=5.7
ENV MYSQL_VERSION=5.7.40-1.el7
# 此處提前將 rpm 原文件下載好,縮短構(gòu)建時(shí)間
COPY aarch64 mysql-shell-8.0.12-1.el7.aarch64.rpm /tmp
COPY my.cnf /etc/my.cnf
RUN set -eux; yum install -y libaio numactl; cd /tmp && rpm -ivh --force mysql-community-minimal-debuginfo-5.7.40-1.el7.aarch64.rpm mysql-community-server-minimal-5.7.40-1.el7.aarch64.rpm; yum clean all; mkdir -p /etc/mysql/conf.d; mkdir -p /etc/mysql/mysql.conf.d; find /etc/my.cnf /etc/mysql/ -name '*.cnf' -print0 | xargs -0 grep -lZE '^(bind-address|log)' | xargs -rt -0 sed -Ei 's/^(bind-address|log)/#&/'; mkdir -p /var/lib/mysql /var/run/mysqld; chown mysql:mysql /var/lib/mysql /var/run/mysqld; chmod 1777 /var/lib/mysql /var/run/mysqld; mkdir /docker-entrypoint-initdb.d; mysqld --version; mysql --version

ENV MYSQL_SHELL_VERSION=8.0.31-1.el7
RUN set -eux; rpm -ivh /tmp/mysql-shell-8.0.12-1.el7.aarch64.rpm; rm -rf /tmp;mkdir /tmp; chmod -R 777 /tmp; yum clean all; mysqlsh --version

# ?? /var/lib/mysql 需要添加引號(hào),否則運(yùn)行時(shí)報(bào)錯(cuò) mount destination [/var/lib/mysql] not absolute: unknown
VOLUME ["/var/lib/mysql"]
COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
RUN ln -s /usr/local/bin/docker-entrypoint.sh /entrypoint.sh # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 3306 33060
CMD ["mysqld"]

2、docker-entrypoint.sh

說(shuō)明1:EOF 塊代碼的縮進(jìn)做了調(diào)整,避免報(bào)錯(cuò) warning: here-document at line 161 delimited by end-of-file (wanted `EOF')。

說(shuō)明2:在原始內(nèi)容基礎(chǔ)上單獨(dú)添加了 391 行,以解決Kylin V10兼容性問(wèn)題,有空單獨(dú)出一篇文講一下其中的坑。

#!/bin/bash
set -eo pipefail
shopt -s nullglob

# logging functions
mysql_log() {
        local type="$1"; shift
        # accept argument string or stdin
        local text="$*"; if [ "$#" -eq 0 ]; then text="$(cat)"; fi
        local dt; dt="$(date --rfc-3339=seconds)"
        printf '%s [%s] [Entrypoint]: %s\n' "$dt" "$type" "$text"
}
mysql_note() {
        mysql_log Note "$@"
}
mysql_warn() {
        mysql_log Warn "$@" >&2
}
mysql_error() {
        mysql_log ERROR "$@" >&2
        exit 1
}

# usage: file_env VAR [DEFAULT]
#    ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
#  "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
file_env() {
        local var="$1"
        local fileVar="${var}_FILE"
        local def="${2:-}"
        if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
                mysql_error "Both $var and $fileVar are set (but are exclusive)"
        fi
        local val="$def"
        if [ "${!var:-}" ]; then
                val="${!var}"
        elif [ "${!fileVar:-}" ]; then
                val="$(< "${!fileVar}")"
        fi
        export "$var"="$val"
        unset "$fileVar"
}

# check to see if this file is being run or sourced from another script
_is_sourced() {
        # https://unix.stackexchange.com/a/215279
        [ "${#FUNCNAME[@]}" -ge 2 ] \
                && [ "${FUNCNAME[0]}" = '_is_sourced' ] \
                && [ "${FUNCNAME[1]}" = 'source' ]
}

# usage: docker_process_init_files [file [file [...]]]
#    ie: docker_process_init_files /always-initdb.d/*
# process initializer files, based on file extensions
docker_process_init_files() {
        # mysql here for backwards compatibility "${mysql[@]}"
        mysql=( docker_process_sql )

        echo
        local f
        for f; do
                case "$f" in
                        *.sh)
                                # https://github.com/docker-library/postgres/issues/450#issuecomment-393167936
                                # https://github.com/docker-library/postgres/pull/452
                                if [ -x "$f" ]; then
                                        mysql_note "$0: running $f"
                                        "$f"
                                else
                                        mysql_note "$0: sourcing $f"
                                        . "$f"
                                fi
                                ;;
                        *.sql)     mysql_note "$0: running $f"; docker_process_sql < "$f"; echo ;;
                        *.sql.bz2) mysql_note "$0: running $f"; bunzip2 -c "$f" | docker_process_sql; echo ;;
                        *.sql.gz)  mysql_note "$0: running $f"; gunzip -c "$f" | docker_process_sql; echo ;;
                        *.sql.xz)  mysql_note "$0: running $f"; xzcat "$f" | docker_process_sql; echo ;;
                        *.sql.zst) mysql_note "$0: running $f"; zstd -dc "$f" | docker_process_sql; echo ;;
                        *)         mysql_warn "$0: ignoring $f" ;;
                esac
                echo
        done
}

# arguments necessary to run "mysqld --verbose --help" successfully (used for testing configuration validity and for extracting default/configured values)
_verboseHelpArgs=(
        --verbose --help
        --log-bin-index="$(mktemp -u)" # https://github.com/docker-library/mysql/issues/136
)

mysql_check_config() {
        local toRun=( "$@" "${_verboseHelpArgs[@]}" ) errors
        if ! errors="$("${toRun[@]}" 2>&1 >/dev/null)"; then
                mysql_error $'mysqld failed while attempting to check config\n\tcommand was: '"${toRun[*]}"$'\n\t'"$errors"
        fi
}

# Fetch value from server config
# We use mysqld --verbose --help instead of my_print_defaults because the
# latter only show values present in config files, and not server defaults
mysql_get_config() {
        local conf="$1"; shift
        "$@" "${_verboseHelpArgs[@]}" 2>/dev/null \
                | awk -v conf="$conf" '$1 == conf && /^[^ \t]/ { sub(/^[^ \t]+[ \t]+/, ""); print; exit }'
        # match "datadir      /some/path with/spaces in/it here" but not "--xyz=abc\n     datadir (xyz)"
}

# Ensure that the package default socket can also be used
# since rpm packages are compiled with a different socket location
# and "mysqlsh --mysql" doesn't read the [client] config
# related to https://github.com/docker-library/mysql/issues/829
mysql_socket_fix() {
        local defaultSocket
        defaultSocket="$(mysql_get_config 'socket' mysqld --no-defaults)"
        if [ "$defaultSocket" != "$SOCKET" ]; then
                ln -sfTv "$SOCKET" "$defaultSocket" || :
        fi
}

# Do a temporary startup of the MySQL server, for init purposes
docker_temp_server_start() {
        if [ "${MYSQL_MAJOR}" = '5.7' ]; then
                "$@" --skip-networking --default-time-zone=SYSTEM --socket="${SOCKET}" &
                mysql_note "Waiting for server startup"
                local i
                for i in {30..0}; do
                        # only use the root password if the database has already been initialized
                        # so that it won't try to fill in a password file when it hasn't been set yet
                        extraArgs=()
                        if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
                                extraArgs+=( '--dont-use-mysql-root-password' )
                        fi
                        if docker_process_sql "${extraArgs[@]}" --database=mysql <<<'SELECT 1' &> /dev/null; then
                                break
                        fi
                        sleep 1
                done
                if [ "$i" = 0 ]; then
                        mysql_error "Unable to start server."
                fi
        else
                # For 5.7+ the server is ready for use as soon as startup command unblocks
                if ! "$@" --daemonize --skip-networking --default-time-zone=SYSTEM --socket="${SOCKET}"; then
                        mysql_error "Unable to start server."
                fi
        fi
}

# Stop the server. When using a local socket file mysqladmin will block until
# the shutdown is complete.
docker_temp_server_stop() {
        if ! mysqladmin --defaults-extra-file=<( _mysql_passfile ) shutdown -uroot --socket="${SOCKET}"; then
                mysql_error "Unable to shut down server."
        fi
}

# Verify that the minimally required password settings are set for new databases.
docker_verify_minimum_env() {
        if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
mysql_error <<EOF
Database is uninitialized and password option is not specified
You need to specify one of the following as an environment variable:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
EOF
        fi

        # This will prevent the CREATE USER from failing (and thus exiting with a half-initialized database)
        if [ "$MYSQL_USER" = 'root' ]; then
mysql_error <<EOF
MYSQL_USER="root", MYSQL_USER and MYSQL_PASSWORD are for configuring a regular user and cannot be used for the root user
Remove MYSQL_USER="root" and use one of the following to control the root user password:
- MYSQL_ROOT_PASSWORD
- MYSQL_ALLOW_EMPTY_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
EOF
        fi

        # warn when missing one of MYSQL_USER or MYSQL_PASSWORD
        if [ -n "$MYSQL_USER" ] && [ -z "$MYSQL_PASSWORD" ]; then
                mysql_warn 'MYSQL_USER specified, but missing MYSQL_PASSWORD; MYSQL_USER will not be created'
        elif [ -z "$MYSQL_USER" ] && [ -n "$MYSQL_PASSWORD" ]; then
                mysql_warn 'MYSQL_PASSWORD specified, but missing MYSQL_USER; MYSQL_PASSWORD will be ignored'
        fi
}

# creates folders for the database
# also ensures permission for user mysql of run as root
docker_create_db_directories() {
        local user; user="$(id -u)"

        local -A dirs=( ["$DATADIR"]=1 )
        local dir
        dir="$(dirname "$SOCKET")"
        dirs["$dir"]=1

        # "datadir" and "socket" are already handled above (since they were already queried previously)
        local conf
        for conf in \
                general-log-file \
                keyring_file_data \
                pid-file \
                secure-file-priv \
                slow-query-log-file \
        ; do
                dir="$(mysql_get_config "$conf" "$@")"

                # skip empty values
                if [ -z "$dir" ] || [ "$dir" = 'NULL' ]; then
                        continue
                fi
                case "$conf" in
                        secure-file-priv)
                                # already points at a directory
                                ;;
                        *)
                                # other config options point at a file, but we need the directory
                                dir="$(dirname "$dir")"
                                ;;
                esac

                dirs["$dir"]=1
        done

        mkdir -p "${!dirs[@]}"

        if [ "$user" = "0" ]; then
                # this will cause less disk access than `chown -R`
                find "${!dirs[@]}" \! -user mysql -exec chown --no-dereference mysql '{}' \;
        fi
}

# initializes the database directory
docker_init_database_dir() {
        mysql_note "Initializing database files"
        "$@" --initialize-insecure --default-time-zone=SYSTEM
        mysql_note "Database files initialized"
}

# Loads various settings that are used elsewhere in the script
# This should be called after mysql_check_config, but before any other functions
docker_setup_env() {
        # Get config
        declare -g DATADIR SOCKET
        DATADIR="$(mysql_get_config 'datadir' "$@")"
        SOCKET="$(mysql_get_config 'socket' "$@")"

        # Initialize values that might be stored in a file
        file_env 'MYSQL_ROOT_HOST' '%'
        file_env 'MYSQL_DATABASE'
        file_env 'MYSQL_USER'
        file_env 'MYSQL_PASSWORD'
        file_env 'MYSQL_ROOT_PASSWORD'

        declare -g DATABASE_ALREADY_EXISTS
        if [ -d "$DATADIR/mysql" ]; then
                DATABASE_ALREADY_EXISTS='true'
        fi
}

# Execute sql script, passed via stdin
# usage: docker_process_sql [--dont-use-mysql-root-password] [mysql-cli-args]
#    ie: docker_process_sql --database=mydb <<<'INSERT ...'
#    ie: docker_process_sql --dont-use-mysql-root-password --database=mydb <my-file.sql
docker_process_sql() {
        passfileArgs=()
        if [ '--dont-use-mysql-root-password' = "$1" ]; then
                passfileArgs+=( "$1" )
                shift
        fi
        # args sent in can override this db, since they will be later in the command
        if [ -n "$MYSQL_DATABASE" ]; then
                set -- --database="$MYSQL_DATABASE" "$@"
        fi

        mysql --defaults-extra-file=<( _mysql_passfile "${passfileArgs[@]}") --protocol=socket -uroot -hlocalhost --socket="${SOCKET}" --comments "$@"
}

# Initializes database with timezone info and root password, plus optional extra db/user
docker_setup_db() {
        # Load timezone info into database
        if [ -z "$MYSQL_INITDB_SKIP_TZINFO" ]; then
                # sed is for https://bugs.mysql.com/bug.php?id=20545
                mysql_tzinfo_to_sql /usr/share/zoneinfo \
                        | sed 's/Local time zone must be set--see zic manual page/FCTY/' \
                        | docker_process_sql --dont-use-mysql-root-password --database=mysql
                        # tell docker_process_sql to not use MYSQL_ROOT_PASSWORD since it is not set yet
        fi
        # Generate random root password
        if [ -n "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
                MYSQL_ROOT_PASSWORD="$(openssl rand -base64 24)"; export MYSQL_ROOT_PASSWORD
                mysql_note "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
        fi
        # Sets root password and creates root users for non-localhost hosts
        local rootCreate=
        # default root to listen for connections from anywhere
        if [ -n "$MYSQL_ROOT_HOST" ] && [ "$MYSQL_ROOT_HOST" != 'localhost' ]; then
# no, we don't care if read finds a terminating character in this heredoc
# https://unix.stackexchange.com/questions/265149/why-is-set-o-errexit-breaking-this-read-heredoc-expression/265151#265151
read -r -d '' rootCreate <<EOSQL || true
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;
EOSQL
        fi

        local passwordSet=
        # no, we don't care if read finds a terminating character in this heredoc (see above)
read -r -d '' passwordSet <<EOSQL || true
ALTER USER 'root'@'localhost' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
EOSQL

        # tell docker_process_sql to not use MYSQL_ROOT_PASSWORD since it is just now being set
docker_process_sql --dont-use-mysql-root-password --database=mysql <<EOSQL
-- What's done in this file shouldn't be replicated
--  or products like mysql-fabric won't work
SET @@SESSION.SQL_LOG_BIN=0;

${passwordSet}
GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION ;
FLUSH PRIVILEGES ;
${rootCreate}
DROP DATABASE IF EXISTS test ;
EOSQL

        # Creates a custom database and user if specified
        if [ -n "$MYSQL_DATABASE" ]; then
                mysql_note "Creating database ${MYSQL_DATABASE}"
                docker_process_sql --database=mysql <<<"CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;"
        fi

        if [ -n "$MYSQL_USER" ] && [ -n "$MYSQL_PASSWORD" ]; then
                mysql_note "Creating user ${MYSQL_USER}"
                docker_process_sql --database=mysql <<<"CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;"

                if [ -n "$MYSQL_DATABASE" ]; then
                        mysql_note "Giving user ${MYSQL_USER} access to schema ${MYSQL_DATABASE}"
                        docker_process_sql --database=mysql <<<"GRANT ALL ON \`${MYSQL_DATABASE//_/\\_}\`.* TO '$MYSQL_USER'@'%' ;"
                fi
        fi
}

_mysql_passfile() {
        # echo the password to the "file" the client uses
        # the client command will use process substitution to create a file on the fly
        # ie: --defaults-extra-file=<( _mysql_passfile )
        if [ '--dont-use-mysql-root-password' != "$1" ] && [ -n "$MYSQL_ROOT_PASSWORD" ]; then
cat <<EOF
[client]
password="${MYSQL_ROOT_PASSWORD}"
EOF
        fi
}

# Mark root user as expired so the password must be changed before anything
# else can be done (only supported for 5.6+)
mysql_expire_root_user() {
        if [ -n "$MYSQL_ONETIME_PASSWORD" ]; then
docker_process_sql --database=mysql <<EOSQL
ALTER USER 'root'@'%' PASSWORD EXPIRE;
EOSQL
        fi
}

# check arguments for an option that would cause mysqld to stop
# return true if there is one
_mysql_want_help() {
        local arg
        for arg; do
                case "$arg" in
                        -'?'|--help|--print-defaults|-V|--version)
                                return 0
                                ;;
                esac
        done
        return 1
}

_main() {
        # if command starts with an option, prepend mysqld
        if [ "${1:0:1}" = '-' ]; then
                set -- mysqld "$@"
        fi

        # skip setup if they aren't running mysqld or want an option that stops mysqld
        if [ "$1" = 'mysqld' ] && ! _mysql_want_help "$@"; then
                mysql_note "Entrypoint script for MySQL Server ${MYSQL_VERSION} started."

                # 解決Kylin V10兼容性問(wèn)題
                ulimit -n 1048576 && ulimit -a >/dev/null && ulimit -n

                mysql_check_config "$@"
                # Load various environment variables
                docker_setup_env "$@"
                docker_create_db_directories "$@"

                # If container is started as root user, restart as dedicated mysql user
                if [ "$(id -u)" = "0" ]; then
                        mysql_note "Switching to dedicated user 'mysql'"
                        exec gosu mysql "$BASH_SOURCE" "$@"
                fi

                # there's no database, so it needs to be initialized
                if [ -z "$DATABASE_ALREADY_EXISTS" ]; then
                        docker_verify_minimum_env

                        # check dir permissions to reduce likelihood of half-initialized database
                        ls /docker-entrypoint-initdb.d/ > /dev/null

                        docker_init_database_dir "$@"

                        mysql_note "Starting temporary server"
                        docker_temp_server_start "$@"
                        mysql_note "Temporary server started."

                        mysql_socket_fix
                        docker_setup_db
                        docker_process_init_files /docker-entrypoint-initdb.d/*

                        mysql_expire_root_user

                        mysql_note "Stopping temporary server"
                        docker_temp_server_stop
                        mysql_note "Temporary server stopped"

                        echo
                        mysql_note "MySQL init process done. Ready for start up."
                        echo
                else
                        mysql_socket_fix
                fi
        fi
        exec "$@"
}

# If we are sourced from elsewhere, don't perform any further actions
if ! _is_sourced; then
        _main "$@"
fi

3、my.cnf文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-852167.html

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client]
socket=/var/run/mysqld/mysqld.sock

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

到了這里,關(guān)于【Docker】MySQL 源碼構(gòu)建 Docker 鏡像(基于 ARM 64 架構(gòu))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 在amd64平臺(tái)構(gòu)建適用于linux/arm64/v8平臺(tái)的Docker鏡像

    該鏡像內(nèi)置了Redis、MySQL、Nginx、JDK11功能 Docker 提供了一種名為 Buildx 的功能,它允許在不同的平臺(tái)上進(jìn)行多架構(gòu)構(gòu)建。我們可以使用 Buildx 在 amd64 平臺(tái)上構(gòu)建適用于 linux/arm64/v8 平臺(tái)的 Docker 鏡像。 請(qǐng)按照以下步驟進(jìn)行操作: 確保您的 Docker 安裝中已啟用 Buildx。您可以運(yùn)行以

    2024年02月17日
    瀏覽(18)
  • 如何使用 docker pull 拉取特定架構(gòu)amd64、arm64、aarch64的容器鏡像

    如何使用 docker pull 拉取特定架構(gòu)amd64、arm64、aarch64的容器鏡像

    通過(guò)修改 dockerd 配置文件,并重載,可以在服務(wù)器上開啟 dockerd 的實(shí)驗(yàn)屬性。為配置文件 /etc/docker/daemon.json 添加 “experimental”: true。 修改后的配置文件看起來(lái)和下面的比較像: 修改完成后,使用以下命令重置服務(wù): 在 docker pull 時(shí)指定參數(shù),即可完成指定架構(gòu)鏡像的拉取。

    2024年02月11日
    瀏覽(30)
  • x86 平臺(tái)利用 qemu-user-static 實(shí)現(xiàn) arm64 平臺(tái) docker 鏡像的運(yùn)行和構(gòu)建

    x86 平臺(tái)利用 qemu-user-static 實(shí)現(xiàn) arm64 平臺(tái) docker 鏡像的運(yùn)行和構(gòu)建

    因?yàn)閲?guó)產(chǎn)化的普及,尤其一些證券和銀行行業(yè),已經(jīng)開始走信創(chuàng)的路線,后期也許會(huì)接觸到國(guó)產(chǎn) CPU ( arm 平臺(tái),比如華為的鯤鵬處理器) 自己買 arm 平臺(tái)的 CPU ,這個(gè)成本著實(shí)吃不消,于是嘗試 x86 平臺(tái)運(yùn)行 arm 平臺(tái)的容器來(lái)降本增效 docker 運(yùn)行其他平臺(tái)容器,需要使用 --pla

    2024年02月02日
    瀏覽(45)
  • (三)基于arm64/aarch64架構(gòu)的Debian Linux中mysql5.7+詳細(xì)安裝過(guò)程

    (三)基于arm64/aarch64架構(gòu)的Debian Linux中mysql5.7+詳細(xì)安裝過(guò)程

    (一)移動(dòng)端安卓手機(jī)改造成linux服務(wù)器Linux中安裝軟件踩坑歷險(xiǎn)記 (二)Debian Linux系統(tǒng)中安裝oracle JDK1.8詳細(xì)過(guò)程(arm64/aarch64架構(gòu)下) 在上一篇文章中,主要分享了 改造后的安卓手機(jī)Linux系統(tǒng)中 JDK1.8的安裝與環(huán)境變量配置等內(nèi)容。本文就 基于arm/aarch64指令集架構(gòu)的Linux系統(tǒng)中 mysql5

    2024年01月21日
    瀏覽(25)
  • ARM64架構(gòu)-Ubuntu20更換國(guó)內(nèi)鏡像源

    在嵌入式開發(fā)中,常用到ARM64的開發(fā)平臺(tái),進(jìn)行下載東西時(shí)想換國(guó)內(nèi)源,下面以中科大源為參考 其實(shí)吧它就像蘋果和案桌的軟件應(yīng)用商店一樣,為L(zhǎng)inux用戶提供軟件下載及更新服務(wù)的。 Linux家族有三個(gè)軟件源系統(tǒng): yum源,使用這種軟件管理器的主要是:RedHat,CentOS apt源,使用

    2023年04月13日
    瀏覽(15)
  • nanopc t6 的ubuntu22.04用docker 安裝openwrt 23.05.2,基于arm64 (aarch64)架構(gòu)

    我是用nanopc t6的官方系統(tǒng),rk3588-XYZ-ubuntu-jammy-x11-desktop-arm64-YYYYMMDD.img.gz,可以從官方的百度網(wǎng)盤下載,根據(jù)官方教材刷入nanopc t6中即可。官方網(wǎng)址如下: NanoPC-T6/zh - FriendlyELEC WiKi 畢竟剛刷的系統(tǒng),先設(shè)置root密碼 默認(rèn)的賬戶和密碼都是pi,我是自己添加了sudo用戶,刪除了pi用

    2024年01月17日
    瀏覽(53)
  • M芯片Mac構(gòu)建支持arm64的java8基礎(chǔ)鏡像

    拉取指定平臺(tái)的鏡像 openjdk:8-jdk-alpine 沒(méi)有安裝bash,只安裝sh,所以進(jìn)入容器命令 以openjdk:8-jdk-alpine為基礎(chǔ)鏡像,添加bash Dockerfile 使用新的Dockerfile構(gòu)建帶有bash的鏡像: 重新打的鏡像即可使用以下命令進(jìn)入容器

    2024年03月21日
    瀏覽(30)
  • 【docker】x86主機(jī)在docker中運(yùn)行arm64鏡像

    1、在x86搭建arm64 ros的開發(fā)環(huán)境。 2、宿主機(jī):虛擬機(jī)x86_ubuntu18 3、設(shè)備:jetson agx xavier(jetpack4.6.1) jetson已安裝各種軟件環(huán)境 打包jeston文件系統(tǒng) 把U盤插到j(luò)etson,然后執(zhí)行打包命令。 --exclude是排除不需要打包的文件 2、x86加載docker文件 a、打包完成后,將U盤插到pc主機(jī) b、將文

    2024年02月05日
    瀏覽(19)
  • 注意避坑:centos7官方版鏡像不支持arm架構(gòu)(docker請(qǐng)求的映像的平臺(tái)(linux/aamd64)與檢測(cè)到的主機(jī)平臺(tái)(linux/alm64/v8)不匹配)fauria/vsftpd

    注意避坑:centos7官方版鏡像不支持arm架構(gòu)(docker請(qǐng)求的映像的平臺(tái)(linux/aamd64)與檢測(cè)到的主機(jī)平臺(tái)(linux/alm64/v8)不匹配)fauria/vsftpd

    注意是centos7 docker官方版鏡像不支持arm架構(gòu)(FROM centos:7),不是centos7不支持arm 今天基于fauria/vsftpd在我們的arm盒子上做了個(gè)docker鏡像,但是用鏡像run容器的時(shí)候提示: 翻譯就是: 警告:請(qǐng)求的映像的平臺(tái)(linux/aamd64)與檢測(cè)到的主機(jī)平臺(tái)(linux/alm64/v8)不匹配,并且沒(méi)有請(qǐng)求

    2024年02月08日
    瀏覽(25)
  • docker自定義java鏡像(解決java:8鏡像不支持arm64/aarch64的問(wèn)題)

    docker自定義java鏡像(解決java:8鏡像不支持arm64/aarch64的問(wèn)題)

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 承接上文,在麒麟V10服務(wù)器(Linux內(nèi)核為arm64/aarch64的云服務(wù)器)已經(jīng)離線安裝好docker,安裝好對(duì)應(yīng)版本的且可以使用的jdk,服務(wù)器上有arrch64版本的jdk安裝包(如:jdk-8u311-linux-aarch64.tar.gz),在構(gòu)建應(yīng)用

    2024年01月16日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包