星途物语 星途物语
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
记一言
留言板
归档
GitHub (opens new window)

星途物语

尚记时,记之
首页
  • 随手记录
  • 故障处理
  • Nginx
  • MySQL
  • Ansible
  • Nexus
  • Tomcat
  • Docker
  • Zabbix
  • Prometheus
  • Git
  • GitLab
  • Jenkins
  • Kubernetes
  • Shell
  • Python
  • 圈圈空间
  • 做饭这件事
收藏站点
记一言
留言板
归档
GitHub (opens new window)
  • 随手记录

    • QPS优化记录
    • 阿里云SLB演示
    • DDOS预防
    • Linux内核优化
    • rsync同步守护进程
    • NFS文件同步
    • Tomcat升级
    • 编译安装mysql后添加到systemd管理
    • 防火墙笔记
    • python自动化巡检服务器
    • redis集群升级
    • nacosV2.5.1数据库脚本
    • Coze本地部署and接入大模型
    • 本地部署Affine
    • Doris2.1.7单机部署-dockercompose
  • 故障处理

    • 处理防MIME攻击后出现的问题解决
    • windows server 2008 R2系统崩溃后PE修复
    • sqlserver连接问题
    • U盘在服务器安装CentOS7的问题and解决
  • MySQL学习笔记

    • MySQL5.7安装
    • MySQL常用操作语句
    • MySQL主从架构实施
    • MySQL主主架构实施
    • MySQL MHA高可用实施
    • MyCat读写分离
    • MySQL创建用户时的授权
    • MySQL备份
    • MySQL通配符
    • Ubuntu22.04安装mysql
      • Ubuntu22.04安装mysql8
        • 1.准备环境
        • 2.解压mysql文件
        • 3.卸载原有的mysql(如果有)
        • 4.安装deb包
        • 5.修改数据目录到 /home/mysql/data
        • 6.将原始数据库文件迁移(如果已经生成)
        • 7.初始化数据库(如果是新安装)
        • 8.重启服务并测试
        • 9.设置mysql8数据库密码永不过期
      • Ubuntu22.04安装mysql5
        • 1.准备环境
        • 2.解压mysql文件
        • 3.卸载原有的mysql(如果有)
        • 4.安装deb包
        • 5.修改数据目录到 /home/mysql/data
        • 6.将原始数据库文件迁移(如果已经生成)
        • 7.初始化数据库(如果是新安装)
        • 8.重启服务并测试
      • 数据迁移
        • 脚本迁移
        • 1.数据准备
        • 2.导入数据到mysql5
        • 3.在mysql5主机上创建数据迁移脚本
        • 手动迁移
        • 1.查看有哪些业务库
        • 2.执行 mysqldump 导出(排除系统库)
        • 3.通过SCP传到主机2
        • 4.在主机2上导入
        • 5.验证数据
        • 6.注意事项
  • Nginx学习笔记

    • 状态码含义
    • 匹配优先级
    • Nginx常用操作
    • 添加第三方模块
    • 关于路径匹配
    • 转发和重写
    • 内置变量
    • Nginx配置文件结构
  • Tomcat学习笔记

    • 部署Tomcat
    • 修改发布目录
    • Tomcat调优
  • Redis学习笔记

    • 通过 tar.gz 包安装部署 redis
    • redis 配置文件
    • 哨兵集群
    • redis常用命令
    • 虚拟机安装 redis.tar.gz 遇到的问题
  • Ansible学习笔记

    • 部署和使用 ansible
    • ansible 自带的密码认证参数
    • 批量免密操作:批量分发公钥
    • 配置主机清单
    • ansible 小知识
    • 模块介绍
    • 剧本
    • 一键部署 rsync 环境
    • 批量安装一个tomcat
    • 批量安装一个nginx
    • 批量安装 zabbix-agent
  • Zabbix学习笔记

    • 部署 zabbix 服务端、客户端
    • 自定义监控
    • 触发器
    • 监控项类型
    • 简单检查模式
    • zabbix web 界面结构信息
    • 邮件报警
    • 微信报警
    • snmp 监控网络设备
    • 部署 zabbix 服务端、客户端
    • jmx 监控 java 应用
    • ipmi 监控硬件
    • 自动化注册
    • 监控项的主要项和相关项
    • percona 监控 mysql
  • Git学习笔记

    • 配置 git
    • 常用命令
  • GitLab学习笔记

    • 环境准备
    • 安装 gitlab
    • gitlab 忘记 root 管理员密码的处理办法
  • Jenkins学习笔记

    • 安装部署
    • jenkins 使用脚本完成项目构建
    • jenkins 自动构建最新项目
    • 将 jenkins 自动部署的结果返回给 gitlab
    • jenkins 上线 java 项目
    • jenkins pipeline
  • Docker学习笔记

    • 安装 docker
    • 配置 docker 源
    • docker 中的常见名词
    • 镜像管理命令
    • 容器管理命令
    • 创建容器
    • 数据卷
    • docker network
    • 搭建 LNMP
    • Dockerfile
    • Dockerfile 搭建 tomcat
    • docker 镜像磁盘扩容
    • docker composer
    • Harbor 私有镜像仓库
    • docker 面试题
    • docker desktop 运行时与虚拟机冲突
    • docker离线安装
  • Nexus学习笔记
  • Prometheus学习笔记

    • 核心组件
    • 工作原理
    • 安装和配置
    • 启动 Prometheus
    • PromQL 使用
    • 数据模型
    • Exporter
    • 演示服务
    • Grafana 数据可视化
    • Prometheus 告警
  • Kubernetes学习笔记

    • K8S(v1.18.0)的介绍
    • K8S(v1.18.0)集群环境的搭建
    • K8S(v1.18.0)资源管理
    • K8S(v1.18.0)的实战入门
    • K8S(v1.18.0)的Pod详解
    • K8S(v1.18.0)的Pod控制器详解
    • K8S(v1.18.0)的Service详解
    • K8S(v1.18.0)的数据存储
  • 运维
  • MySQL学习笔记
星途物语
2025-08-11
目录

Ubuntu22.04安装mysql

# Ubuntu22.04安装mysql

# Ubuntu22.04安装mysql8

download:https://dev.mysql.com/downloads/file/?id=542926

# 1.准备环境

sudo -i
sudo apt update
sudo apt install libncurses5 libaio1 libtinfo5 -y
1
2
3

# 2.解压mysql文件

mkdir -p /home/mysql/temp
chown -R zhou:zhou /home/mysql/temp
tar -xvf mysql-server_8.4.6-1ubuntu22.04_amd64.deb-bundle.tar
1
2
3
image-20250807161609285

# 3.卸载原有的mysql(如果有)

sudo systemctl stop mysql
sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* -y
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
sudo apt autoremove -y
1
2
3
4

# 4.安装deb包

wget http://archive.ubuntu.com/ubuntu/pool/universe/m/mecab/libmecab2_0.996-1.2ubuntu1_amd64.deb

sudo dpkg -i mysql-common_8.4.6-1ubuntu22.04_amd64.deb

sudo dpkg -i mysql-community-client-plugins_8.4.6-1ubuntu22.04_amd64.deb

sudo dpkg -i mysql-community-client-core_8.4.6-1ubuntu22.04_amd64.deb

sudo dpkg -i mysql-community-client_8.4.6-1ubuntu22.04_amd64.deb

sudo dpkg -i mysql-client_8.4.6-1ubuntu22.04_amd64.deb

sudo dpkg -i libmecab2_0.996-1.2ubuntu1_amd64.deb

sudo dpkg -i mysql-community-server-core_8.4.6-1ubuntu22.04_amd64.deb

sudo dpkg -i mysql-community-server_8.4.6-1ubuntu22.04_amd64.deb

sudo dpkg -i mysql-server_8.4.6-1ubuntu22.04_amd64.deb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

问题1:安装mysql-community-server-core时缺少依赖:libmecab2

处理1:

wget http://archive.ubuntu.com/ubuntu/pool/universe/m/mecab/libmecab2_0.996-1.2ubuntu1_amd64.deb
sudo dpkg -i libmecab2_0.996-1.2ubuntu1_amd64.deb
1
2

# 5.修改数据目录到 /home/mysql/data

停止mysql:

sudo systemctl stop mysql
1

创建目标目录并赋权限:

sudo mkdir -p /home/mysql/data
sudo mkdir -p /home/mysql/log
sudo touch /home/mysql/log/error.log
sudo chown -R mysql:mysql /home/mysql
1
2
3
4

修改配置文件:

配置文件路径一般是 /etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/my.cnf

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
---
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /home/mysql/data
log-error       = /home/mysql/log/error.log
---
1
2
3
4
5
6
7
8

# 6.将原始数据库文件迁移(如果已经生成)

sudo mv /var/lib/mysql/* /home/mysql/data/
sudo chown -R mysql:mysql /home/mysql
sudo chmod -R 755 /home/mysql
1
2
3

# 7.初始化数据库(如果是新安装)

如果你没有迁移旧的 /var/lib/mysql,你需要初始化数据目录:

sudo mysqld --initialize --user=mysql --datadir=/home/mysql/data
1

这将自动生成一个随机 root 密码,系统日志中可找到:

sudo grep 'temporary password' /home/mysql/log/error.log
1

# 8.重启服务并测试

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

sudo systemctl start mysql
sudo systemctl enable mysql
sudo mysql -u root -p
1
2
3
4
5
6

验证数据目录位置:

mysql -u root -p -e "SHOW VARIABLES LIKE 'datadir';"
1
image-20250808091347796

登录后修改当前用户密码:

ALTER USER USER() IDENTIFIED BY '123456';
1

# 9.设置mysql8数据库密码永不过期

SET PERSIST default_password_lifetime = 0;
SET GLOBAL default_password_lifetime = 0;
1
2

# Ubuntu22.04安装mysql5

download:https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.36-1ubuntu18.04_amd64.deb-bundle.tar

# 1.准备环境

sudo -i
sudo apt-get install ./libmysql*
sudo apt-get install libtinfo5
1
2
3

# 2.解压mysql文件

mkdir -p /home/mysql/temp
chown -R zhou:zhou /home/mysql/temp
tar -xvf mysql-server_5.7.36-1ubuntu18.04_amd64.deb-bundle.tar
1
2
3

# 3.卸载原有的mysql(如果有)

同上

# 4.安装deb包

sudo apt-get install ./mysql-community-client_5.7.36-1ubuntu18.04_amd64.deb
sudo apt-get install ./mysql-client_5.7.36-1ubuntu18.04_amd64.deb
sudo apt-get install ./mysql-community-server_5.7.36-1ubuntu18.04_amd64.deb
sudo apt-get install ./mysql-server_5.7.36-1ubuntu18.04_amd64.deb
1
2
3
4

# 5.修改数据目录到 /home/mysql/data

同上

# 6.将原始数据库文件迁移(如果已经生成)

同上

# 7.初始化数据库(如果是新安装)

同上

# 8.重启服务并测试

同上

# 数据迁移

目的是从mysql5整体备份数据迁移到mysql8,看看有没有什么问题

# 脚本迁移

# 1.数据准备

下载测试数据:https://github.com/datacharmer/test_db

# 2.导入数据到mysql5

mysql -t <employees.sql -u root -p
1
use employees;
show tables;
1
2
image-20250809145422754

# 3.在mysql5主机上创建数据迁移脚本

执行迁移脚本前,需要准备mysql迁移账号,我这里直接使用root账号,迁移完就删除

查看root是否允许远程登录,如果不允许就创建用户:

SELECT user, host FROM mysql.user WHERE user='root';
1
image-20250809152119390
# 发现60和61root都不能远程登录,在60和61机器都执行,由于都是从61主机进行远程登录,这里就设置为61
CREATE USER 'root'@'10.0.0.61' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.0.61' WITH GRANT OPTION;
FLUSH PRIVILEGES;
1
2
3
4

假设:

  • 主机1(MySQL 5.6):10.0.0.60,root/123456
  • 主机2(MySQL 8.4):10.0.0.61,root/123456
vim mysql_migrate_with_users.sh
---
#!/bin/bash
# 只迁移MySQL业务库数据(不迁移用户权限)

# ===== 配置区 =====
SRC_HOST="10.0.0.61"       # 源MySQL 5.6 IP
SRC_PORT=3306              # 源端口
SRC_USER="root"            # 源用户名
SRC_PASS="123456"          # 源密码

DST_HOST="10.0.0.60"       # 目标MySQL 8.4 IP
DST_PORT=3306              # 目标端口
DST_USER="root"            # 目标用户名
DST_PASS="123456"          # 目标密码

DST_SSH_USER="zhou"        # 目标服务器登录用户(非root)
# ==================

BACKUP_FILE="/tmp/mysql_migrate_$(date +%F_%H%M%S).sql"

echo "=== 1. 获取业务数据库列表(排除系统库) ==="
DATABASES=$(mysql -h "$SRC_HOST" -P "$SRC_PORT" -u "$SRC_USER" -p"$SRC_PASS" -N -e "SHOW DATABASES;" | grep -Ev "^(mysql|performance_schema|information_schema|sys)$")

if [ -z "$DATABASES" ]; then
  echo "❌ 没有业务数据库可导出"
  exit 1
fi

echo "业务数据库:$DATABASES"

echo "=== 2. 导出业务数据库 ==="
mysqldump -h "$SRC_HOST" -P "$SRC_PORT" -u "$SRC_USER" -p"$SRC_PASS" \
  --databases $DATABASES \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  --hex-blob \
  > "$BACKUP_FILE"

if [ $? -ne 0 ]; then
  echo "❌ 数据导出失败!"
  exit 1
fi
echo "✅ 数据导出完成:$BACKUP_FILE"

echo "=== 3. 传输备份文件到目标服务器 ==="
scp "$BACKUP_FILE" "$DST_SSH_USER@$DST_HOST:/tmp/"

if [ $? -ne 0 ]; then
  echo "❌ 文件传输失败!"
  exit 1
fi

echo "=== 4. 在目标服务器导入数据库 ==="
ssh -t "$DST_SSH_USER@$DST_HOST" "sudo -i mysql -P $DST_PORT -u \"$DST_USER\" -p\"$DST_PASS\" < /tmp/$(basename $BACKUP_FILE)"

if [ $? -ne 0 ]; then
  echo "❌ 数据导入失败!"
  exit 1
fi

echo "✅ 数据库迁移完成!"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
chmod +x mysql_migrate_with_users.sh
./mysql_migrate_with_users.sh
1
2
image-20250809155810234

# 手动迁移

# 1.查看有哪些业务库

mysql -u root -p -e "SHOW DATABASES;"
1
image-20250810215451507

# 2.执行 mysqldump 导出(排除系统库)

mysqldump -u root -p \
  --databases db1 db2 db3 db4 db5 db6 db7 db8 db9 db10 employees \
  --single-transaction --quick --routines --events --triggers \
  > /tmp/mysql_all_databases.sql
1
2
3
4
image-20250810215718308

# 3.通过SCP传到主机2

scp /tmp/mysql_all_databases.sql root@10.0.0.60:/tmp/
1

# 4.在主机2上导入

mysql -u root -p < /tmp/mysql_all_databases.sql
1

手动导入用户并授权,例如:

CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON db1.* TO 'username'@'%';
FLUSH PRIVILEGES;
1
2
3

实例:

CREATE USER IF NOT EXISTS 'zhou'@'%' IDENTIFIED BY '123456';

GRANT ALL PRIVILEGES ON db1.* TO 'zhou'@'%';
GRANT ALL PRIVILEGES ON db2.* TO 'zhou'@'%';
GRANT ALL PRIVILEGES ON db3.* TO 'zhou'@'%';
GRANT ALL PRIVILEGES ON db4.* TO 'zhou'@'%';
GRANT ALL PRIVILEGES ON db5.* TO 'zhou'@'%';
......

FLUSH PRIVILEGES;
1
2
3
4
5
6
7
8
9
10

# 5.验证数据

mysql -u root -p -e "SHOW DATABASES;"
mysql -u root -p -e "SELECT COUNT(*) FROM db1.某个表;"
1
2

# 6.注意事项

字符集

MySQL 8 默认 utf8mb4,如果 MySQL 5.6 是 utf8,导入时可能会有字符集警告,可以在导出时加:--default-character-set=utf8

SQL_MODE

MySQL 8.4 默认 STRICT_TRANS_TABLES 等更严格,可能会导致部分旧数据导入失败,可以先调整:SET GLOBAL sql_mode='';

导入完成后再恢复默认,SET GLOBAL sql_mode = @@SESSION.sql_mode;

#MySQL
上次更新: 8/22/2025, 10:15:41 AM
MySQL通配符
状态码含义

← MySQL通配符 状态码含义→

Theme by Vdoing | Copyright © 2025-2025 | 鄂ICP备2024086820号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式