MySQL介绍和MySQL包安装(一)
MySQL介绍和安装
1.MySQL介绍
图1 MySQL
MySQL官方:https://www.mysql.com
MySQL 是一种非常流行的开源关系型数据库管理系统(RDBMS),广泛应用于各种规模的项目中,从小型网站到大型企业级应用。以下是关于 MySQL 的详细介绍:
1.1 MySQL 的定义
MySQL 是一个高性能、多用户、多线程的 SQL 数据库服务器,它使用 SQL(Structured Query Language,结构化查询语言)作为与数据库交互的接口。它最初由瑞典的 MySQL AB 公司开发,后来被 Sun 公司收购,再后来随着 Oracle 收购 Sun,MySQL 成为 Oracle 公司旗下的产品。不过,MySQL 仍然保持开源,遵循 GPL(General Public License)许可证。
1.2 MySQL 的特点
- 开源免费
- MySQL 是开源软件,这意味着用户可以免费下载、安装和使用它。开源特性也使得 MySQL 的社区非常活跃,有大量的开发者参与贡献代码和插件,帮助不断完善和优化数据库系统。
- 高性能
- MySQL 在处理大量数据时表现出色。它支持多种存储引擎,其中最常用的是 InnoDB。InnoDB 存储引擎提供了事务支持、行级锁定和外键约束等功能,能够有效地提高并发性能和数据一致性。例如,在一个电商网站中,当多个用户同时下单时,InnoDB 存储引擎可以确保订单数据的正确插入和更新,而不会出现数据冲突。
- 跨平台
- MySQL 可以运行在多种操作系统上,包括 Linux、Windows、macOS 等。这种跨平台特性使得开发人员可以在不同的开发环境中使用 MySQL,方便了开发和部署。比如,开发人员可以在 Windows 系统上开发应用程序,而将数据库部署在 Linux 服务器上,以利用 Linux 的稳定性和性能优势。
- 易于使用
- MySQL 提供了简单易用的命令行工具和图形化界面工具(如 MySQL Workbench)。通过这些工具,用户可以方便地进行数据库的创建、表的定义、数据的插入、查询和更新等操作。例如,通过 MySQL Workbench,用户可以直观地看到数据库的结构,通过图形化界面进行 SQL 查询的编写和执行,而不需要记住复杂的命令行语法。
- 可扩展性强
- MySQL 支持集群和分布式数据库架构,能够满足大规模数据存储和高并发访问的需求。通过配置主从复制、分片等技术,可以实现数据库的高可用性和负载均衡。例如,在一个大型互联网应用中,可以使用主从复制架构,将主数据库用于数据的写入操作,从数据库用于读取操作,从而提高系统的读取性能。
- 安全性高
- MySQL 提供了多种安全机制,如用户权限管理、数据加密、SSL/TLS 支持等。用户可以根据需要为不同的用户分配不同的权限,限制用户对数据库的操作范围。例如,可以为普通用户只授予查询权限,而将数据修改和删除权限授予管理员用户。同时,通过数据加密和 SSL/TLS 加密通信,可以保护数据在存储和传输过程中的安全。
1.3 MySQL 的应用领域
- 网站开发
- MySQL 是 Web 开发中常用的数据库之一。它与 PHP、Python、Java 等编程语言配合良好,能够快速实现动态网站的功能。例如,在一个新闻网站中,MySQL 可以存储新闻文章、用户评论、用户信息等数据,通过 SQL 查询语句,网站可以动态地展示新闻内容和用户评论。
- 企业级应用
- 许多企业使用 MySQL 来存储和管理业务数据。例如,在一个企业的客户关系管理系统(CRM)中,MySQL 可以存储客户信息、销售记录、订单详情等数据。通过 MySQL 的事务处理功能,可以确保业务数据的完整性和一致性。
- 大数据分析
- 虽然 MySQL 本身不是专门的大数据分析工具,但它可以作为数据仓库的一部分,存储和管理结构化数据。通过与其他数据分析工具(如 Apache Hive、Spark 等)结合,可以对存储在 MySQL 中的数据进行分析和挖掘,为企业决策提供支持。
- 移动应用后端
- 在移动应用开发中,MySQL 可以作为后端数据库,存储用户数据、应用配置信息等。移动应用通过网络请求与 MySQL 数据库进行交互,获取数据并展示给用户。例如,在一个社交类移动应用中,MySQL 可以存储用户的好友关系、消息记录等数据。
1.4 MySQL 的存储引擎
MySQL 支持多种存储引擎,每种存储引擎都有其特点和适用场景。以下是一些常见的存储引擎:
- InnoDB
- 这是 MySQL 的默认存储引擎。它支持事务处理、行级锁定和外键约束。InnoDB 的事务特性可以保证数据操作的原子性、一致性、隔离性和持久性(ACID)。例如,在一个银行系统的转账操作中,InnoDB 存储引擎可以确保转账操作要么完全成功,要么完全失败,不会出现数据不一致的情况。
- MyISAM
- MyISAM 是 MySQL 早期的默认存储引擎,它支持全文索引,适合用于文本搜索等场景。不过,MyISAM 不支持事务处理和行级锁定,而是采用表级锁定。这意味着在并发操作时,可能会出现性能瓶颈。例如,在一个高并发的电商网站中,如果使用 MyISAM 存储引擎,可能会导致多个用户同时下单时出现数据冲突或性能下降的情况。
- Memory
- Memory 存储引擎将数据存储在内存中,因此读取速度非常快。但是,Memory 存储引擎的数据在数据库重启后会丢失,因此它适合用于临时数据存储和快速查询的场景。例如,在一个需要快速统计用户访问次数的应用中,可以使用 Memory 存储引擎存储临时的访问数据,然后定期将数据汇总到其他存储引擎中。
1.5 MySQL 的架构
MySQL 的架构可以分为多个层次,主要包括客户端层、服务端层和存储引擎层。
- 客户端层
- 客户端层是用户与 MySQL 数据库交互的入口。用户可以通过命令行工具、图形化界面工具或编程语言中的数据库连接库(如 JDBC、ODBC 等)与 MySQL 数据库进行通信。客户端层的主要功能是将用户的 SQL 查询语句发送到服务端,并接收服务端返回的查询结果。
- 服务端层
- 服务端层是 MySQL 的核心部分,它负责处理客户端的请求。服务端层主要包括连接池、查询解析器、查询优化器和缓存机制等组件。连接池用于管理客户端的连接,提高连接的复用性。查询解析器将客户端发送的 SQL 查询语句解析成内部的逻辑结构。查询优化器根据查询语句和数据库的统计信息,选择最优的查询执行计划。缓存机制可以缓存查询结果和数据页,提高查询性能。例如,当用户多次查询相同的数据时,缓存机制可以直接返回缓存中的结果,而不需要重新从磁盘读取数据。
- 存储引擎层
- 存储引擎层负责数据的存储和检索。如前面提到的,MySQL 支持多种存储引擎,每种存储引擎都有自己的数据存储格式和访问机制。服务端层通过统一的接口与存储引擎层进行交互,将查询请求转发给存储引擎,并将存储引擎返回的结果返回给客户端。
1.6 MySQL 的优势和局限性
-
优势
- 性能卓越:MySQL 在处理高并发和大数据量时表现出色,尤其在 Web 应用和互联网领域,能够快速响应用户的请求。
- 成本低:开源免费的特性使得 MySQL 的使用成本较低,适合中小型企业或个人开发者。
- 社区支持强大:由于 MySQL 的开源性和广泛的使用,拥有庞大的开发者社区。用户可以在社区中找到大量的技术文档、教程和解决方案。
- 易于学习和部署:MySQL 的语法简单,易于上手。同时,它提供了多种安装方式和配置选项,方便用户根据自己的需求进行部署。
-
局限性
-
功能相对有限:与一些商业数据库(如 Oracle、SQL Server)相比,MySQL 在某些高级功能(如复杂的数据分析、高级的存储过程等)上可能稍显不足。
-
数据一致性问题:在高并发场景下,如果配置不当,可能会出现数据一致性问题。例如,如果使用了不支持事务的存储引擎(如 MyISAM),可能会导致数据丢失或不一致的情况。
-
可维护性问题:随着数据库规模的增大,MySQL 的维护成本可能会增加。例如,数据库的备份、恢复、性能优化等操作需要专业的知识和经验。
-
1.7 MySQL 的未来发展趋势
- 性能优化
- MySQL 开发团队会不断优化数据库的性能,特别是在高并发和大数据量处理方面。例如,通过改进存储引擎的算法、优化查询优化器的逻辑等方式,进一步提高 MySQL 的性能。
- 与云计算的融合
- 随着云计算技术的发展,MySQL 会更加紧密地与云计算平台结合。云数据库(如 Amazon RDS for MySQL、阿里云 MySQL 等)提供了自动备份、弹性扩展、高可用性等特性。
2.MySQL安装
2.1 主机初始化
2.1.1 设置网卡名
-
Rocky Linux 9/10、Almalinux 9/10、CentOS Stream 9/10、AnolisOS 23、OpenCloudOS 9:
-
创建 systemd 链接文件: 创建
/etc/systemd/network/70-eth0.link
文件。[root@rocky10 ~]# mkdir -p /etc/systemd/network/ [root@rocky10 ~]# touch /etc/systemd/network/70-eth0.link [root@rocky10 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:02:55:30 brd ff:ff:ff:ff:ff:ff altname enp3s0 altname enx000c29025530 inet 172.31.15.1/20 brd 172.31.15.255 scope global dynamic noprefixroute ens160 valid_lft 1776sec preferred_lft 1776sec inet6 fe80::20c:29ff:fe02:5530/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@rocky10 ~]# cat > /etc/systemd/network/70-eth0.link << EOF [Match] MACAddress=00:0c:29:f8:60:8f [Link] Name=eth0 EOF # 也可以执行下面命令 ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` ETHMAC=`ip addr show ${ETHNANME} | awk -F' ' '/ether/{print $2}'` mkdir /etc/systemd/network/ touch /etc/systemd/network/70-eth0.link cat > /etc/systemd/network/70-eth0.link << EOF [Match] MACAddress=${ETHMAC} [Link] Name=eth0 EOF
-
修改 NetworkManager 配置文件: 如果使用 NetworkManager 管理网络,需要修改
/etc/NetworkManager/system-connections
下的配置文件。[root@rocky10 ~]# mv /etc/NetworkManager/system-connections/ens160.nmconnection /etc/NetworkManager/system-connections/eth0.nmconnection [root@rocky10 ~]# sed -i.bak 's/'ens160'/eth0/' /etc/NetworkManager/system-connections/eth0.nmconnection # 也可以执行下面命令 mv /etc/NetworkManager/system-connections/${ETHNAME}.nmconnection /etc/NetworkManager/system-connections/eth0.nmconnection sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/NetworkManager/system-connections/eth0.nmconnection
-
-
Rocky Linux 8、Almalinux 8、CentOS 7、CentOS Stream 8、openEuler 22.03和24.03 LTS、AnolisOS 8、OpenCloudOS 8、Kylin Server v10/v11、UOS Server v20:
-
修改 GRUB 配置文件: 打开
/etc/default/grub
文件,添加以下内容到GRUB_CMDLINE_LINUX
行net.ifnames=0 biosdevname=0
执行以下命令:
sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@ net.ifnames=0 biosdevname=0"@' /etc/default/grub
然后更新 GRUB 配置:
grub2-mkconfig -o /boot/grub2/grub.cfg
如果是 UEFI 引导系统,更新命令为:
# Rocky grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg # Almalinux grub2-mkconfig -o /boot/efi/EFI/almalinux/grub.cfg # CentOS grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # openEuler grub2-mkconfig -o /boot/efi/EFI/openEuler/grub.cfg # AnolisOS grub2-mkconfig -o /boot/efi/EFI/anolis/grub.cfg # OpenCloudOS grub2-mkconfig -o /boot/efi/EFI/opencloudos/grub.cfg # Kylin Server grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg # UOS Server grub2-mkconfig -o /boot/efi/EFI/uos/grub.cfg # UEFI 引导系统可以直接执行下面命令: EFI_DIR=`find /boot/efi/ -name "grub.cfg" | awk -F"/" '{print $5}'` grub2-mkconfig -o /boot/efi/EFI/${EFI_DIR}/grub.cfg
-
创建 Udev 规则文件: 创建
/etc/udev/rules.d/10-network.rules
文件,并添加以下内容:SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="<网卡MAC地址>", NAME="eth0"
**注意:**创建Udev这个步骤只在AnolisOS 8上执行。
将
<网卡MAC地址>
替换为实际网卡的 MAC 地址。[root@anolisos8 ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:47:02:3f brd ff:ff:ff:ff:ff:ff altname enp2s1 inet 172.31.15.25/20 brd 172.31.15.255 scope global dynamic noprefixroute ens33 valid_lft 1785sec preferred_lft 1785sec inet6 fe80::20c:29ff:fe47:23f/64 scope link noprefixroute valid_lft forever preferred_lft forever [root@anolis8 ~]# cat >> /etc/udev/rules.d/10-network.rules << EOF SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:0c:29:c5:38:3b", NAME="eth0" EOF # 也可以执行下面命令 ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` ETHMAC=`ip addr show ${ETHNANME} | awk -F' ' '/ether/{print $2}'` cat >> /etc/udev/rules.d/10-network.rules << EOF SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="${ETHMAC}", NAME="eth0" EOF
-
修改网卡配置文件: 创建
/etc/sysconfig/network-scripts/ifcfg-eth0
文件,并配置网卡参数,例如:ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` mv /etc/sysconfig/network-scripts/ifcfg-${ETHNAME} /etc/sysconfig/network-scripts/ifcfg-eth0 sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/sysconfig/network-scripts/ifcfg-eth0
-
-
Ubuntu和Debian:
# Ubuntu和Debian先启用root用户,并设置密码 raymond@ubuntu2404:~$ cat set_root_login.sh #!/bin/bash read -p "请输入密码: " PASSWORD echo ${PASSWORD} |sudo -S sed -ri 's@#(PermitRootLogin )prohibit-password@\1yes@' /etc/ssh/sshd_config sudo systemctl restart sshd sudo -S passwd root <<-EOF ${PASSWORD} ${PASSWORD} EOF raymond@ubuntu2404:~$ bash set_root_login.sh 请输入密码: 123456 [sudo] password for raymond: New password: Retype new password: passwd: password updated successfully
-
修改 GRUB 配置文件: 打开
/etc/default/grub
文件,添加以下内容到GRUB_CMDLINE_LINUX
行net.ifnames=0 biosdevname=0
执行以下命令:
sed -ri.bak '/^GRUB_CMDLINE_LINUX=/s@"$@net.ifnames=0 biosdevname=0"@' /etc/default/grub
然后更新 GRUB 配置:
grub-mkconfig -o /boot/grub/grub.cfg
如果是 UEFI 引导系统,更新命令为:
# Ubuntu grub-mkconfig -o /boot/efi/EFI/ubuntu/grub.cfg # Debian grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg # UEFI 引导系统可以直接执行下面命令: EFI_DIR=`find /boot/efi/ -name "grub.cfg" | awk -F"/" '{print $5}'` grub-mkconfig -o /boot/efi/EFI/${EFI_DIR}/grub.cfg
-
修改网卡配置文件:
# Ubuntu Server 24.04 LTS ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/50-cloud-init.yaml # Ubuntu Server 22.04 LTS ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` touch /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg cat > /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg <<-EOF network: {config: disabled} EOF sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/50-cloud-init.yaml # Ubuntu Server 20.04 LTS ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/00-installer-config.yaml # Ubuntu Server 18.04 LTS ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/netplan/01-netcfg.yaml # Debian ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'` sed -i.bak 's/'${ETHNAME}'/eth0/' /etc/network/interfaces
-
-
重启系统:
reboot
重启后,网卡名称将变为
eth0
。
2.1.2 设置ip地址
ETHNAME=`ip addr | awk -F"[ :]" '/^2/{print $3}'`
# IP变量是ip地址,PREFIX变量是子网掩码位数;GATEWAY变量是网关地址;PRIMARY_DNS变量是主DNS,BACKUP_DNS变量是备用DNS,根据自己的需求修改。
IP=172.31.0.10
PREFIX=20
GATEWAY=172.31.0.2
PRIMARY_DNS=223.5.5.5
BACKUP_DNS=180.76.76.76
Rocky Linux 9/10、Almalinux 9/10、CentOS Stream 9/10、AnolisOS 23、OpenCloudOS 9:
cat > /etc/NetworkManager/system-connections/${ETHNAME}.nmconnection <<-EOF
[connection]
id=${ETHNAME}
type=ethernet
interface-name=${ETHNAME}
[ipv4]
address1=${IP}/${PREFIX},${GATEWAY}
dns=${PRIMARY_DNS};${BACKUP_DNS};
method=manual
EOF
Rocky Linux 8、Almalinux 8、CentOS 7、CentOS Stream 8、openEuler 22.03和24.03 LTS、AnolisOS 8、OpenCloudOS 8、Kylin Server v10/v11、UOS Server v20:
cat > /etc/sysconfig/network-scripts/ifcfg-${ETHNAME} <<-EOF
NAME=${ETHNAME}
DEVICE=${ETHNAME}
ONBOOT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=${IP}
PREFIX=${PREFIX}
GATEWAY=${GATEWAY}
DNS1=${PRIMARY_DNS}
DNS2=${BACKUP_DNS}
EOF
Ubuntu:
# Ubuntu Server 18.04 LTS
cat > /etc/netplan/01-netcfg.yaml <<-EOF
network:
version: 2
renderer: networkd
ethernets:
${ETHNAME}:
dhcp4: no
dhcp6: no
addresses: [${IP}/${PREFIX}]
gateway4: ${GATEWAY}
nameservers:
addresses: [${PRIMARY_DNS}, ${BACKUP_DNS}]
# Ubuntu Server 20.04 LTS
cat > /etc/netplan/00-installer-config.yaml <<-EOF
network:
version: 2
renderer: networkd
ethernets:
${ETHNAME}:
dhcp4: no
dhcp6: no
addresses: [${IP}/${PREFIX}]
gateway4: ${GATEWAY}
nameservers:
addresses: [${PRIMARY_DNS}, ${BACKUP_DNS}]
EOF
# Ubuntu Server 22.04/24.04 LTS
cat > /etc/netplan/50-cloud-init.yaml <<-EOF
network:
version: 2
renderer: networkd
ethernets:
${ETHNAME}:
dhcp4: no
dhcp6: no
addresses: [${IP}/${PREFIX}]
routes:
- to: default
via: ${GATEWAY}
nameservers:
addresses: [${PRIMARY_DNS}, ${BACKUP_DNS}]
EOF
Debian:
sed -ri -e "s/allow-hotplug/auto/g" -e "s/dhcp/static/g" /etc/network/interfaces
sed -i '/static/a\address '${IP}'/'${PREFIX}'\ngateway '${GATEWAY}'\ndns-nameservers '${PRIMARY_DNS}' '${BACKUP_DNS}'\n' /etc/network/interfaces
openSUSE:
cat > /etc/sysconfig/network/ifcfg-${ETHNAME} <<-EOF
STARTMODE='auto'
BOOTPROTO='static'
IPADDR='${IP}/${PREFIX}'
EOF
touch /etc/sysconfig/network/routes
cat > /etc/sysconfig/network/routes <<-EOF
default ${GATEWAY} - -
EOF
sed -ri 's/(NETCONFIG_DNS_STATIC_SERVERS=).*/\1"'${PRIMARY_DNS}' '${BACKUP_DNS}'"/g' /etc/sysconfig/network/config
2.1.3 配置镜像源
Rocky:
# 阿里云镜像站Rocky系统镜像源地址是:mirrors.aliyun.com/rockylinux,火山引擎镜像站Rocky系统镜像源地址是:mirrors.volces.com/rockylinux,后面地址是rockylinux,使用下面命令执行
MIRROR=mirrors.aliyun.com
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://'${MIRROR}'/rockylinux|g' /etc/yum.repos.d/[Rr]ocky*.repo
# 搜狐镜像站Rocky系统镜像源地址是:mirrors.sohu.com/Rocky,后面地址是Rocky,使用下面命令执行
MIRROR=mirrors.sohu.com
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://'${OLD_MIRROR}'/$contentdir|baseurl=https://'${MIRROR}'/Rocky|g' /etc/yum.repos.d/[Rr]ocky*.repo
# 其余镜像站Rocky系统镜像源地址后面地址都是rocky,使用下面命令执行
MIRROR=mirrors.tencent.com
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://'${MIRROR}'/rocky|g' /etc/yum.repos.d/[Rr]ocky*.repo
dnf clean all && dnf makecache
Almalinux:
MIRROR=mirrors.tencent.com
OLD_MIRROR=$(sed -rn '/^.*baseurl=/s@.*=http.*://(.*)/(.*)/\$releasever/.*/$@\1@p' /etc/yum.repos.d/almalinux*.repo | head -1)
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^# baseurl=https://'${OLD_MIRROR}'|baseurl=https://'${MIRROR}'|g' /etc/yum.repos.d/almalinux*.repo
CentOS Stream 9和10:
cat update_mirror.pl
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
# 要修改镜像源,请去修改url变量!
my $url = 'mirrors.aliyun.com';
my $mirrors = "https://$url/centos-stream";
if (@ARGV < 1) {
die "Usage: $0 <filename1> <filename2> ...\n";
}
while (my $filename = shift @ARGV) {
my $backup_filename = $filename . '.bak';
rename $filename, $backup_filename;
open my $input, "<", $backup_filename;
open my $output, ">", $filename;
while (<$input>) {
s/^metalink/# metalink/;
if (m/^name/) {
my (undef, $repo, $arch) = split /-/;
$repo =~ s/^\s+|\s+$//g;
($arch = defined $arch ? lc($arch) : '') =~ s/^\s+|\s+$//g;
if ($repo =~ /^Extras/) {
$_ .= "baseurl=${mirrors}/SIGs/\$releasever-stream/extras" . ($arch eq 'source' ? "/${arch}/" : "/\$basearch/") . "extras-common\n";
} else {
$_ .= "baseurl=${mirrors}/\$releasever-stream/$repo" . ($arch eq 'source' ? "/" : "/\$basearch/") . ($arch ne '' ? "${arch}/tree/" : "os") . "\n";
}
}
print $output $_;
}
}
rpm -q perl &> /dev/null || { echo -e "\\033[01;31m "安装perl工具,请稍等..."\033[0m";yum -y install perl ; }
perl ./update_mirror.pl /etc/yum.repos.d/centos*.repo
dnf clean all && dnf makecache
CentOS Stream 8:
MIRROR=mirrors.aliyun.com
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org/$contentdir|baseurl=https://'${MIRROR}'/centos-vault|g' /etc/yum.repos.d/CentOS-*.repo
dnf clean all && dnf makecache
CentOS 7:
MIRROR=mirrors.aliyun.com
OS_RELEASE_FULL_VERSION=`cat /etc/centos-release | sed -rn 's/^(CentOS Linux release )(.*)( \(Core\))/\2/p'`
sed -i.bak -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://'${MIRROR}'/centos-vault|g' -e "s/\$releasever/${OS_RELEASE_FULL_VERSION}/g" /etc/yum.repos.d/CentOS-*.repo
yum clean all && yum makecache
Ubuntu Server 24.04 LTS:
MIRROR=mirrors.aliyun.com
sed -ri "s@^(URIs: )(http.*://)(.*)(/ubuntu).?@\1https://${MIRROR}\4@g" /etc/apt/sources.list.d/ubuntu.sources
apt update
Ubuntu Server 18.04/20.04/22.04 LTS:
MIRROR=mirrors.aliyun.com
OLD_MIRROR=`sed -rn "s@^deb http(.*)://(.*)/ubuntu/? $(lsb_release -cs) main.*@\2@p" /etc/apt/sources.list`
SECURITY_MIRROR=`sed -rn "s@^deb http(.*)://(.*)/ubuntu.* $(lsb_release -cs)-security main.*@\2@p" /etc/apt/sources.list`
sed -i.bak -e 's@http.*://'${OLD_MIRROR}'@https://'${MIRROR}'@g' -e 's@http.*://'${SECURITY_MIRROR}'@https://'${MIRROR}'@g' /etc/apt/sources.list
apt update
Debian:
MIRROR=mirrors.aliyun.com
OLD_MIRROR=`sed -rn "s@^deb http(.*)://(.*)/debian/? $(lsb_release -cs) main.*@\2@p" /etc/apt/sources.list`
SECURITY_MIRROR=`sed -rn "s@^deb http(.*)://(.*)/debian-security $(lsb_release -cs)-security main.*@\2@p" /etc/apt/sources.list`
sed -ri.bak -e 's/'${OLD_MIRROR}'/'${MIRROR}'/g' -e 's/'${SECURITY_MIRROR}'/'${MIRROR}'/g' -e 's/^(deb cdrom.*)/#\1/g' /etc/apt/sources.list
apt update
openEuler:
MIRROR=mirrors.aliyun.com
OLD_MIRROR=$(awk -F'/' '/^baseurl=/{print $3}' /etc/yum.repos.d/openEuler.repo | head -1)
sed -i.bak -e 's|^metalink=|#metalink=|g' -e 's|http.*://'${OLD_MIRROR}'|https://'${MIRROR}'/openeuler|g' /etc/yum.repos.d/openEuler.repo
dnf clean all && dnf makecache
AnolisOS:
OLD_MIRROR=$(sed -rn '/^.*baseurl=/s@.*=http.*://(.*)/(.*)/\$releasever/.*/$@\1@p' /etc/yum.repos.d/AnolisOS*.repo | head -1)
# 中国科学院软件研究所镜像站AnolisOS系统镜像源地址是:mirror.iscas.ac.cn/openanolis,后面地址是openanolis,使用下面命令执行
MIRROR=mirror.iscas.ac.cn
sed -i.bak -e 's|http.*://'${OLD_MIRROR}'/anolis|https://'${MIRROR}'/openanolis|g' /etc/yum.repos.d/AnolisOS*.repo
# 其余镜像站AnolisOS系统镜像源地址后面地址都是anolis,使用下面命令执行
MIRROR=mirrors.aliyun.com
sed -i.bak -e 's|http.*://'${OLD_MIRROR}'/anolis|https://'${MIRROR}'/anolis|g' /etc/yum.repos.d/AnolisOS*.repo
dnf clean all && dnf makecache
OpenCloudOS:
MIRROR=mirrors.tencent.com
OLD_MIRROR=$(awk -F'/' '/^baseurl=/{print $3}' /etc/yum.repos.d/OpenCloudOS*.repo | head -1)
sed -i.bak -e 's|http.*://'${OLD_MIRROR}'|https://'${MIRROR}'|g' /etc/yum.repos.d/OpenCloudOS*.repo
dnf clean all && dnf makecache
openSUSE:
MIRROR=mirrors.aliyun.com
OLD_MIRROR=$(awk -F'/' '/^baseurl=/{print $3}' /etc/zypp/repos.d/repo-*.repo | head -1)
sed -i.bak 's|http.*://'${OLD_MIRROR}'|https://'${MIRROR}'/opensuse|g' /etc/zypp/repos.d/repo-*.repo
zypper clean && zypper refresh
2.1.4 关闭防火墙
# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、openSUSE、Kylin Server、UOS Server
systemctl disable --now firewalld
# CentOS 7还要执行下面命令
systemctl disable --now NetworkManager
# Ubuntu
systemctl disable --now ufw
# Debian默认没有安装防火墙,不用设置
2.1.5 禁用SELinux
# Rocky、Almalinux、CentOS、openEuler、AnolisOS、OpenCloudOS、Kylin Server、UOS Server
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
# Ubuntu、Debian和openSUSE默认没有安装SELinux,不用设置
2.1.6 禁用AppArmor
# openSUSE发行版默认不启用SELinux,而是使用AppArmor来提供强制访问控制(MAC)功能,需要禁用AppArmor。
systemctl disable --now apparmor
2.1.7 设置时区
timedatectl set-timezone Asia/Shanghai
echo 'Asia/Shanghai' >/etc/timezone
# Ubuntu还要设置下面内容
cat >> /etc/default/locale <<-EOF
LC_TIME=en_DK.UTF-8
EOF
2.2 包安装
2.2.1 Yum资源库安装MySQL
2.2.1.1 MySQL 8.0
在Rocky 8/9、Almalinux 8/9、CentOS Stream 8/9、openEuler 22.03/24.03 LTS、AnolisOS 8/23、OpenCloudOS 8/9、Kylin Server v10、UOS Server v20上安装MySQL:
[root@rocky9 ~]# yum list mysql-server --showduplicates
Last metadata expiration check: 0:00:27 ago on Fri 18 Apr 2025 08:58:40 PM CST.
Available Packages
mysql-server.x86_64 8.0.41-2.el9_5 appstream
[root@rocky9 ~]# yum install -y mysql-server
[root@rocky9 ~]# systemctl enable --now mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
[root@rocky9 ~]# mysql -V
mysql Ver 8.0.41 for Linux on x86_64 (Source distribution)
[root@rocky9 ~]# systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
Active: active (running) since Mon 2025-05-26 18:52:06 CST; 19s ago
Process: 11774 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
Process: 11796 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
Main PID: 11870 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 10892)
Memory: 455.1M
CPU: 3.566s
CGroup: /system.slice/mysqld.service
└─11870 /usr/libexec/mysqld --basedir=/usr
May 26 18:52:02 rocky9 systemd[1]: Starting MySQL 8.0 database server...
May 26 18:52:02 rocky9 mysql-prepare-db-dir[11796]: Initializing MySQL database
May 26 18:52:06 rocky9 systemd[1]: Started MySQL 8.0 database server.
[root@rocky9 ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.41 Source distribution
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> status
--------------
mysql Ver 8.0.41 for Linux on x86_64 (Source distribution)
Connection id: 8
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.41 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 39 sec
Threads: 2 Questions: 5 Slow queries: 0 Opens: 120 Flush tables: 3 Open tables: 36 Queries per second avg: 0.128
--------------
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
mysql> exit
Bye
在Kylin Server V11上安装MySQL:
在“Kylin Server V11”操作系统官方没有镜像仓库,需要从官方网站下载安装包来安装。
去“https://www.mysql.com/”网站下载,选择“DOWNLOADS”,如图2所示。
图2 下载MySQL RPM包
选择“MySQL Community (GPL) Downloads”,如图3所示。
图3 下载MySQL RPM包
选择“MySQL Community Server(MySQL社区服务器)”,如图4所示。
图4 下载MySQL RPM包
"Select Version(选择版本)"为:8.0.43,“Select Operating System(选择操作系统)”为:Red Hat Enterprise Linux / Oracle Linux,"Select OS Version(选择操作系统版本)"为:Red Hat Enterprise Linux 9 / Oracle Linux 9 (x86 , 64-bit),然后选择”RPM Bundel“后面的”Download“,如图5所示。
图5 下载MySQL RPM包
[root@kylin11 ~]# wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.43-1.el9.x86_64.rpm-bundle.tar
[root@kylin11 ~]# tar xf mysql-8.0.43-1.el9.x86_64.rpm-bundle.tar
[root@kylin11 ~]# yum install -y perl libaio
[root@kylin11 ~]# rpm -ivh mysql-community-client-plugins-8.0.43-1.el9.x86_64.rpm
[root@kylin11 ~]# rpm -ivh mysql-community-common-8.0.43-1.el9.x86_64.rpm
[root@kylin11 ~]# rpm -ivh mysql-community-libs-8.0.43-1.el9.x86_64.rpm
[root@kylin11 ~]# rpm -ivh mysql-community-client-8.0.43-1.el9.x86_64.rpm
[root@kylin11 ~]# rpm -ivh mysql-community-icu-data-files-8.0.43-1.el9.x86_64.rpm
[root@kylin11 ~]# yum install -y net-tools
[root@kylin11 ~]# rpm -ivh mysql-community-server-8.0.43-1.el9.x86_64.rpm
[root@kylin11 ~]# systemctl enable --now mysqld
[root@kylin11 ~]# ls /var/lib/mysql
auto.cnf client-cert.pem ibdata1 mysql.ibd public_key.pem undo_002
binlog.000001 client-key.pem ibtmp1 mysql.sock server-cert.pem
binlog.index '#ib_16384_0.dblwr' '#innodb_redo' mysql.sock.lock server-key.pem
ca-key.pem '#ib_16384_1.dblwr' '#innodb_temp' performance_schema sys
ca.pem ib_buffer_pool mysql private_key.pem undo_001
[root@kylin11 ~]# mysql -V
mysql Ver 8.0.43 for Linux on x86_64 (MySQL Community Server - GPL)
[root@kylin11 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; preset: disabled)
Active: active (running) since Sat 2025-09-13 14:26:52 CST; 29s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 3075 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 3144 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 8626)
Memory: 408.8M ()
CGroup: /system.slice/mysqld.service
└─3144 /usr/sbin/mysqld
Sep 13 14:26:48 kylin11 systemd[1]: Starting MySQL Server...
Sep 13 14:26:51 kylin11 (mysqld)[3144]: mysqld.service: Referenced but unset environment variable evaluates to a>
Sep 13 14:26:52 kylin11 systemd[1]: Started MySQL Server.
# 获取MySQL初始密码
[root@kylin11 ~]# grep password /var/log/mysqld.log
2025-09-13T06:26:49.258021Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: fWgdHl1)&<C(
# "fWgdHl1)&<C("就是MySQL的初始密码
# 修改mysql密码
[root@kylin11 ~]# mysqladmin -uroot -p'fWgdHl1)&<C(' password 123456
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
mysqladmin: unable to change password; error: 'Your password does not satisfy the current policy requirements'
# 上面报错提示密码太简单
[root@kylin11 ~]# mysqladmin -uroot -p'fWgdHl1)&<C(' password Raymond@2025
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@kylin11 ~]# mysql -uroot -p'Raymond@2025'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.43 MySQL Community Server - GPL
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> status
--------------
mysql Ver 8.0.43 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 10
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.43 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 2 min 9 sec
Threads: 2 Questions: 11 Slow queries: 0 Opens: 140 Flush tables: 3 Open tables: 56 Queries per second avg: 0.085
--------------
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
在CentOS 7上安装MySQL:
# centos7上镜像源默认没有mysql的安装包,需要添加镜像源
[root@centos7 ~]# cat > /etc/yum.repos.d/mysql.repo <<EOF
[mysql]
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-8.0-community-el7-x86_64/
gpgcheck=0
EOF
[root@centos7 ~]# yum makecache
[root@centos7 ~]# yum list mysql-community-server --showduplicates
Loaded plugins: fastestmirror
Repository 'mysql' is missing name in configuration, using id
Loading mirror speeds from cached hostfile
Available Packages
mysql-community-server.x86_64 8.0.11-1.el7 mysql
mysql-community-server.x86_64 8.0.12-1.el7 mysql
mysql-community-server.x86_64 8.0.13-1.el7 mysql
mysql-community-server.x86_64 8.0.14-1.el7 mysql
mysql-community-server.x86_64 8.0.15-1.el7 mysql
mysql-community-server.x86_64 8.0.16-1.el7 mysql
mysql-community-server.x86_64 8.0.16-2.el7 mysql
mysql-community-server.x86_64 8.0.17-1.el7 mysql
mysql-community-server.x86_64 8.0.18-1.el7 mysql
mysql-community-server.x86_64 8.0.19-1.el7 mysql
mysql-community-server.x86_64 8.0.20-1.el7 mysql
mysql-community-server.x86_64 8.0.21-1.el7 mysql
mysql-community-server.x86_64 8.0.22-1.el7 mysql
mysql-community-server.x86_64 8.0.23-1.el7 mysql
mysql-community-server.x86_64 8.0.24-1.el7 mysql
mysql-community-server.x86_64 8.0.25-1.el7 mysql
mysql-community-server.x86_64 8.0.26-1.el7 mysql
mysql-community-server.x86_64 8.0.27-1.el7 mysql
mysql-community-server.x86_64 8.0.28-1.el7 mysql
mysql-community-server.x86_64 8.0.30-1.el7 mysql
mysql-community-server.x86_64 8.0.31-1.el7 mysql
mysql-community-server.x86_64 8.0.32-1.el7 mysql
mysql-community-server.x86_64 8.0.33-1.el7 mysql
mysql-community-server.x86_64 8.0.34-1.el7 mysql
mysql-community-server.x86_64 8.0.35-1.el7 mysql
mysql-community-server.x86_64 8.0.36-1.el7 mysql
mysql-community-server.x86_64 8.0.37-1.el7 mysql
mysql-community-server.x86_64 8.0.39-1.el7 mysql
mysql-community-server.x86_64 8.0.40-1.el7 mysql
mysql-community-server.x86_64 8.0.41-1.el7 mysql
mysql-community-server.x86_64 8.0.42-1.el7 mysql
[root@centos7 ~]# yum -y install mysql-community-server
[root@centos7 ~]# systemctl enable --now mysqld
[root@centos7 ~]# mysql -V
mysql Ver 8.0.42 for Linux on x86_64 (MySQL Community Server - GPL)
[root@centos7 ~]# systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-05-27 03:23:18 CST; 25s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 1153 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 1219 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/mysqld.service
└─1219 /usr/sbin/mysqld
May 27 03:23:14 centos7 systemd[1]: Starting MySQL Server...
May 27 03:23:18 centos7 systemd[1]: Started MySQL Server.
# 获取mysql 5.7初始密码
[root@centos7 ~]# grep password /var/log/mysqld.log
2025-05-26T19:23:15.760607Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ws6_srh4rk=M
# "ws6_srh4rk=M"就是MySQL的初始密码
# 修改mysql密码
[root@centos7 ~]# mysqladmin -uroot -p'ws6_srh4rk=M' password 123456
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
mysqladmin: unable to change password; error: 'Your password does not satisfy the current policy requirements'
[root@centos7 ~]# mysqladmin -uroot -p'ws6_srh4rk=M' password Raymond@2025
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
[root@centos7 ~]# mysql -uroot -p'Raymond@2025'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.42 MySQL Community Server - GPL
Copyright (c) 2000, 2025, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> status
--------------
mysql Ver 8.0.42 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id: 13
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.42 MySQL Community Server - GPL
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/lib/mysql/mysql.sock
Binary data as: Hexadecimal
Uptime: 4 min 2 sec
Threads: 2 Questions: 11 Slow queries: 0 Opens: 140 Flush tables: 3 Open tables: 56 Queries per second avg: 0.045
--------------
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
- 点赞
- 收藏
- 关注作者
评论(0)