Mysql.zip版环境搭建

准备工作

首先去官方下载mysql.zip文件。
下载地址:https://dev.mysql.com/downloads/mysql/5.7.html

安装

将下载好的zip文件进行解压,这里我的解压环境为D:\Program\
文件夹名称为mysql-5.7.35-winx64
以下是目录结构:

mysql-5.7.35-winx64
├─bin
├─data
├─docs
├─include
├─lib
└─share

默认解压后没有data文件夹,需要手动创建data文件夹。

创建好后再创建一个叫my.ini的文件,并在里面增加如下内容:

[mysql]
# 设置mysql客户端默认字符集
default-character-set = utf8mb4 
[mysqld]
#允许客户端通过内存共享连接
shared-memory
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir = E:\\Temp\\.mysql
# 设置mysql数据库的数据的存放目录
datadir = E:\\Temp\\.mysql\\data
# 允许最大连接数
max_connections = 100
# 服务端使用的字符集默认为UTF8
character-set-server = utf8mb4
# 排序规则
collation-server = utf8mb4_general_ci
# 大小写是否敏感
lower_case_table_names = 1
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
# INNODB语法检查
innodb_strict_mode = OFF
# INNODB日志设置
innodb_log_file_size = 30M
innodb_log_buffer_size = 512M
# 内存设置
## 指定MySQL最小内存
#key_buffer_size=5M
## 包大小限制
max_allowed_packet = 2000M
wait_timeout=2880000
interactive_timeout = 2880000
## 指定服务器每个连接可使用的最大排序空间
sort_buffer_size=2M
# INNODB内存配置
innodb_page_size = 32K
innodb_buffer_pool_size = 2048M
# INNODB事务锁超时时长
innodb_lock_wait_timeout = 1500
# binlog日志
disable-log-bin
# 信任生成函数
log_bin_trust_function_creators = 1
explicit_defaults_for_timestamp = true
# 解决Group By的报错
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

注意:这里的路径需要与自己设置的路径相匹配。

windows服务安装

接下来安装服务,在cmd中输入mysqld install [服务名]安装服务。需要管理员权限

在5.7.6版本开始需要执行初始化mysqld --initialize命令。

若已经执行了安装操作,可以使用mysqld -remove删除之前安装的服务,再执行初始化操作。

安装完成后,今后启动就可使用net start [服务名]指令去启动mysql了,例如:net start mysql

顺便一提,停止服务可使用net stop [服务名]

密码设置

首先要启动服务,输入mysqld --initialize --console,注意输出数据中会存在类似这样一行的数据:

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rI5rvf5x5G,E

其中root@localhost:后面的rI5rvf5x5G,E就是初始密码(不含首位空格)。在没有更改密码前,需要记住这个密码,后续登录需要用到。
执行mysql -u root -p回车然后输入密码,即可登录mysql

现在就可以通过密码更新的指令进行数据库密码修改了,完成后记得刷新缓存即可。

MySQL版本5.7.6版本以前用户可以使用如下命令:

SET PASSWORD = PASSWORD('root');

MySQL版本5.7.6版本开始的用户可以使用如下命令:

ALTER USER USER() IDENTIFIED BY 'root';

环境变量设置

script
setx "Path" "%path_%;newpath1;newpath2" /m

版本选择

在实际线上使用过程中发现,用同一个SQL查询相同的数据,返回的时间有很大的差异:

  • 8.0.13版数据库中查询:15.32 sec
  • 8.0.32版数据库中查询:0.04 sec

所以在选择数据库版本时,需要进行详细的调查,目前在本地使用8.0.32版本较为高效,可参考使用该版本!

因存在拒绝服务漏洞,建议选择8.0.35及以上版本进行安装!!!

Linux版安装脚本

所需环境:

  • wget
#!/bin/bash

# Function to get user input with a default value
get_input() {
    local prompt="$1"
    local default="$2"
    read -p "$prompt [$default]: " input
    echo "${input:-$default}"
}

# Function to install Mysql Server
install_mysql() {
    # Prompt user for MySQL version
    MYSQL_VERSION=$(get_input "Enter MySQL version to install" "8.0.36")

    # Prompt user for installation directory
    INSTALL_DIR=$(get_input "Enter installation directory" "/usr/local/mysql")

    # Prompt user for data directory
    DATA_DIR=$(get_input "Enter data directory" "/var/lib/mysql")
    
    # Prompt user for glibc version
    
    GLIBC_VERSION=$(get_input "Enter glibc version" "2.28")

    # Determine the download URL and checksum URL
    MYSQL_TAR="mysql-${MYSQL_VERSION}-linux-glibc${GLIBC_VERSION}-${ARCH}.tar.xz"
    MYSQL_URL="https://dev.mysql.com/get/Downloads/MySQL-$MYSQL_VERSION/$MYSQL_TAR"
    CHECKSUM_URL="https://dev.mysql.com/get/Downloads/MySQL-$MYSQL_VERSION/${MYSQL_TAR}.md5"

    # Download MySQL tarball and checksum
    echo "Downloading MySQL $MYSQL_VERSION..."
    if [ ! -f "${MYSQL_TAR}" ];then
        wget -q --show-progress $MYSQL_URL
    fi
    if [ ! -f "${CHECKSUM_URL}" ];then
        wget -q --show-progress $CHECKSUM_URL
    fi
    
    # Verify checksum
    echo "Verifying checksum..."
    md5sum -c ${MYSQL_TAR}.md5

    if [ $? -ne 0 ]; then
        echo "Checksum verification failed. Exiting."
        exit 1
    fi

    # Extract MySQL tarball
    echo "Extracting MySQL package..."
    tar -xf $MYSQL_TAR

    # Move MySQL to the installation directory
    sudo mv mysql-${MYSQL_VERSION}-linux-glibc${GLIBC_VERSION}-${ARCH} $INSTALL_DIR

    # Create data directory
    sudo mkdir -p $DATA_DIR
    sudo chown -R mysql:mysql $DATA_DIR

    # Install necessary dependencies
    if [ "$OS" == "ubuntu" ]; then
        sudo apt-get update
        sudo apt-get install -y libaio1 libncurses5
    elif [ "$OS" == "centos" ]; then
        sudo yum install -y libaio ncurses-libs
    elif [ "$OS" == "arch" ]; then
        sudo pacman -S --noconfirm libaio ncurses
    fi

    # Initialize MySQL
    sudo $INSTALL_DIR/bin/mysqld --initialize-insecure --user=mysql --basedir=$INSTALL_DIR --datadir=$DATA_DIR

    # Create MySQL service file
    sudo bash -c 'cat > /etc/systemd/system/mysql.service <<EOF
[Unit]
Description=MySQL Server
After=network.target

[Service]
ExecStart='$INSTALL_DIR'/bin/mysqld --basedir='$INSTALL_DIR' --datadir='$DATA_DIR'
User=mysql
Group=mysql
Restart=on-failure
LimitNOFILE=5000

[Install]
WantedBy=multi-user.target
EOF'
    sudo systemctl enable mysql
    sudo systemctl start mysql

    echo "MySQL $MYSQL_VERSION has been installed successfully!"
}

# supported OS array
SUPPORTED_OS=("ubuntu" "centos" "arch")

# Determine the OS type
if [ -f /etc/os-release ]; then
    . /etc/os-release
    OS=$ID
    VERSION_ID=$VERSION_ID
    ARCH=$(uname -m)
else
    echo "Unsupported operating system."
    exit 1
fi

if [[ "${SUPPORTED_OS[@]}" =~ "$OS" ]] ; then
    install_mysql
else
    echo "The current script does not support your system."
    exit 1
fi

拓展知识: Mysql通信协议

Mysql 通信协议主要有这几种:Unix套接字、内存共享、命名管道、TCP/IP套接字…

绝大部分情况下,我们使用的是TCP/IP套接字进行通信的,这种方式最通用,但也会带了通信方面的性能瓶颈。

若是本地通信,Windows建议使用内存共享,Unix/Linux建议使用Unix套接字

交互过程

其交互过程主要分为两个部分:握手认证和指令执行

这里用TCP/IP协议模式进行讲解:

  1. 三次握手建立 TCP 连接。

  2. 建立 MySQL 连接,也就是认证阶段。
    服务端 -> 客户端:发送握手初始化包 (Handshake Initialization Packet)。
    客户端 -> 服务端:发送验证包 (Client Authentication Packet)。
    服务端 -> 客户端:认证结果消息。

  3. 认证通过之后,客户端开始与服务端之间交互,也就是命令执行阶段。
    客户端 -> 服务端:发送命令包 (Command Packet)。
    服务端 -> 客户端:发送回应包 (OK Packet, or Error Packet, or Result Set Packet)。

  4. 断开 MySQL 连接。
    客户端 -> 服务器:发送退出命令包。

  5. 四次握手断开 TCP 连接。


Mysql.zip版环境搭建
https://blog.cikaros.top/doc/1242f29d.html
作者
Cikaros
发布于
2021年7月26日
许可协议