离线安装 mysql

离线安装 mysql

一、ubuntu arm

  1. 下载安装包
    • 官网地址
    • 下载压缩包
    • 上传压缩包
       # 将本地压缩包上传至服务器
       $ scp mysql-8.4.6-linux-glibc2.28-aarch64.tar.xz root@host:/root/mysql/
      
  2. 解压
    # 转到压缩包目录
    $ cd /root/mysql/
    
    # 解压压缩包
    $ sudo tar -xvJf mysql-8.4.6-linux-glibc2.28-aarch64.tar.xz
    
    $ sudo mv mysql-8.4.6-linux-glibc2.28-aarch64 /usr/local/mysql
    
  3. 配置
    • 创建数据目录
      # 创建 mysql 数据目录
      $ sudo mkdir -p /data/mysql/data
      
      # 创建 mysql 日志目录
      $ sudo mkdir -p /data/mysql/log
      
      # 创建 mysql pid 目录
      $ sudo mkdir -p /usr/local/mysql/data/
      
    • 创建配置文件
      
      # 转到 etc 目录
      $ cd /etc
      
      # 创建配置文件
      $ sudo touch my.cnf
      
    • 注意my.cnf 不能随意修改名称,启动 mysql.server 会读取该配置文件(可尝试修改 mysql.server 文件)
    • 写入配置
      [mysqld]
      
      # 启用 mysql_native_password plugin
      mysql_native_password=ON
      
      # 跳过权限表
      #skip_grant_tables=1
      
      # mysql 启动用户
      user=root
      
      # 绑定 IP
      bind-address=0.0.0.0
      
      # 端口,为了安全不使用默认端口
      port=13306
      
      # 安装目录,没有安装到默认目录 /usr/local/mysql 下,
      # 使用自带的 mysql.server 脚本启动mysql服务必须配置
      basedir=/usr/local/mysql
      log-error=/usr/local/mysql/data/mysql.err
      pid-file=/usr/local/mysql/data/mysql.pid
      
      # 数据目录
      datadir=/data/mysql/data
      
      # 允许最大连接数
      max_connections=100
      
      # 允许连接失败的次数。
      max_connect_errors=10
      
      # 服务端使用的字符集
      character-set-server=utf8mb4
      
      # 创建新表时将使用的默认存储引擎
      default-storage-engine=INNODB
      
      # 查询日志
      general_log = 1
      general_log_file = /data/mysql/log/mysql.log
      
      # 慢查询日志
      slow_query_log = 1
      slow_query_log_file = /data/mysql/log/slow.log
      long_query_time = 2
      
      # 错误日志
      log_error = /data/mysql/log/error.log
      
      # 二进制日志
      server_id = 1
      log_bin = /data/mysql/log/mysql-bin
      log_bin_index=/data/mysql/log/mysql-bin.index
      binlog_format=MIXED
      binlog_expire_logs_seconds = 604800
      max_binlog_size=500M
      
      
      [mysql]
      # 设置命令行客户端默认字符集
      default-character-set=utf8mb4
      
      
      [client]
      # 设置mysql客户端默认字符集
      default-character-set=utf8mb4
      
      
  4. 初始化 正常情况无错误信息输出
    # 转到 mysql 二进制文件目录
    $ cd /usr/local/mysql/bin
    
    # 初始化 mysql
    $ sudo ./mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=root --initialize
    
  5. 启动 正常情况无错误信息输出
    # 转到 support-files 目录
    $ cd /usr/local/mysql/support-files
    
    # 启动 mysql
    $ sudo ./mysql.server start
    
  6. 停止
    # 转到 support-files 目录
    $ cd /usr/local/mysql/support-files
    
    # 启动 mysql
    $ sudo ./mysql.server stop
    
  7. 状态
    # 转到 support-files 目录
    $ cd /usr/local/mysql/support-files
    
    # 启动 mysql
    $ sudo ./mysql.server status
    
  8. 环境变量
    # 配置环境变量
    $ sudo export PATH=$PATH:/usr/local/mysql/bin
    
  9. 服务启动
    # 拷贝启动文件
    $ sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/
    
    # 刷新单元服务
    $ sudo systemctl daemon-reload
    
    # 启动服务
    $ sudo systemctl start mysql
    
  10. 重装
    # 删除 data 目录相关文件
    $ sudo rm -rf /data/mysql/data/*
    
    # 删除 log 目录相关文件
    $ sudo rm -rf /data/mysql/log/*
    
    # 重新初始化
    $ sudo ./mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=root --initialize
    
    # 重新启动
    $ sudo ./mysql.server start
    
  11. 参考

二、ubuntu(24.04) x64

  1. 下载安装包
    • 官网地址
    • 下载压缩包
    • 上传压缩包
       # 将本地压缩包上传至服务器
       $ scp mysql-8.4.7-linux-glibc2.28-x86_64.tar.xz root@host:/root/mysql/
      
  2. 其他步骤
    • 参考以上 ubuntu arm
  3. 错误 & 处理
    • 初始化错误:mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

      • 处理:
        # 查找依赖包
        $ sudo apt-cache search libaio
        
        # 安装
        $ sudo apt-get install libaio1t64
        
        # 转到目录
        $ cd /usr/lib/x86_64-linux-gnu/
        
        # 软链接 libaio.so.1
        $ sudo ln -s libaio.so.1t64.0.2 libaio.so.1
        
      • 参考
    • 启动错误:... * The server quit without updating PID file (/usr/local/mysql/mysqld.pid).
      截图

      • 处理:

        # 查看错误日志
        $ cat /data/mysql/log/error.log
        
        # 问题:/tmp/mysql*,文件被其他进程占用问题
        # 删除所有 mysql* 文件
        $ rm -f /tmp/mysql* 
        

        image

      • 重启:

        # 删除初始化数据
        $ sudo rm -rf /data/mysql/data/*
        
        # 删除初始化日志
        $ sudo rm -rf /data/mysql/log/*
        
        # 重新初始化
        $  sudo /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=root --initialize
        
        # 重启
        $ sudo /usr/local/mysql/support-files/mysql.server start
        

三、重置密码

  1. 停止服务
    # 停止 mysql
    $ sudo systemctl stop mysql
    
  2. 启动 mysql 并跳过权限表
    # 转到 bin 目录
    $ cd /usr/local/mysql/bin
    
    # 启动 mysql 并跳过权限表
    $ sudo ./mysqld_safe --skip-grant-tables &
    
  3. 进入数据库
    $ sudo ./mysql
    
  4. 使用 mysql 数据库
    $ use mysql;
    
  5. 设置运行远程连接
    $ update user set host='%' where user ='root';
    
  6. 刷新权限表
    $ FLUSH PRIVILEGES;
    
  7. 修改密码
    # 修改密码,'root'@'%'(root:账号,%:host),'root'(新密码)
    $  ALTER USER 'root'@'%' IDENTIFIED BY 'root';
    
    // 【弃用配置】
    // $ update user set authentication_string='root' where user='root';
    
    # 刷新权限表
    $ FLUSH PRIVILEGES;
    
    • 注意:设置完密码登录出现错误(ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%')
      
      # 刷新权限表
      $ FLUSH PRIVILEGES;
      
      # 将密码设置为空
      $ update user set authentication_string='' where user='root';
      
       # 刷新权限表
      $ FLUSH PRIVILEGES;
      
      # 重新登录(使用连接工具 navicat 无密码连接后会提示修改密码,后面可以使用修改后的密码)
      $ sudo ./mysql -u root -p
      
  8. 退出
    $ exit;
    
  9. 重启
    $ sudo systemctl restart mysql.server.service
    
  10. 开机自启
    $ sudo systemctl enable mysql.server.service
    
    • 注意:非 root 账号,可能会出现:
      ==== AUTHENTICATING FOR org.freedesktop.systemd1.reload-daemon ===
      Authentication is required to reload the systemd state.
      Authenticating as: apricot,,, (apricot)
      Password:
      
    • 解决
       # 打开策略文件
       $ sudo vi /usr/share/polkit-1/actions/org.freedesktop.systemd1.policy
      
       # 修改节点(manage-units),将所有值改成(true)
       <action id="org.freedesktop.systemd1.manage-units">
                <description gettext-domain="systemd">Manage system services or other units</description>
                <message gettext-domain="systemd">Authentication is required to manage system services or other units.</message>
                <defaults>
                        <allow_any>yes</allow_any>
                        <allow_inactive>yes</allow_inactive>
                        <allow_active>yes</allow_active>
                </defaults>
       </action>
      
      
       # 刷新单元服务
       $ systemctl daemon-reload
      
        # 重启polkit
       $ systemctl restart polkit;
      
    • 参考
  11. 验证
    $ sudo ./mysql -u root -p
    
  12. 参考

四、导出 & 导入

  1. 导出
    # 备份表结构、数据,输出到指定目录
    $ sudo /usr/local/mysql/bin/mysqldump -u root -proot apricot_blogs > /home/mysql/apricot-blogs-bak.sql
    
  2. 导入
    # 进入 mysql
    $ sudo /usr/local/mysql/bin/mysql -u root -proot
    
    # 创建 apricot_blogs_bak 数据库
    $ create database apricot_blogs_bak  CHARACTER SET ="utf8mb4" COLLATE = "utf8mb4_0900_ai_ci";
    
    # 使用数据库
    $ use apricot_blogs_bak;
    
    # 导入备份表结构、数据
    $ source /home/mysql/apricot-blogs-bak.sql ;
    
    # 查看数据库
    $ show databases;
    
    # 退出
    $ exit;
    

五、脚本安装

  1. 安装
  2. 卸载
posted @ 2025-10-10 18:39  1764564459  阅读(17)  评论(0)    收藏  举报