MySQL通用二进制包安装

华子目录

作用

  • 二进制包:源码包经过成功编译之后产生的包
  • 优点:由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快
  • 注意:在生产环境中通用二进制包安装方法较为常用

二进制包下载

上传二进制包

  • 使用mobaxterm将二进制包上传到/root/

解压

bash 复制代码
root@ubuntu:~# ls
mysql-8.0.37-linux-glibc2.17-x86_64.tar.xz  snap

root@ubuntu:~# tar -Jxvf mysql-8.0.37-linux-glibc2.17-x86_64.tar.xz
#等待一段时间

root@ubuntu:~# ls     #解压成功
mysql-8.0.37-linux-glibc2.17-x86_64  mysql-8.0.37-linux-glibc2.17-x86_64.tar.xz  snap

移动包到常规PATH路径下

bash 复制代码
root@ubuntu:~# mv mysql-8.0.37-linux-glibc2.17-x86_64   /usr/local/mysql
root@ubuntu:~# ls
mysql-8.0.37-linux-glibc2.17-x86_64.tar.xz  snap

创建mysql用户组

bash 复制代码
root@ubuntu:~# groupadd mysql123
root@ubuntu:~# grep 'mysql' /etc/group    #我们可以看到创建成功
mysql123:x:1001:

创建mysql用户,并指定用户组

bash 复制代码
root@ubuntu:~# useradd -r -g mysql123 -s /bin/false mysql
root@ubuntu:~# id mysql    #我们可以看到创建成功
uid=999(mysql) gid=1001(mysql123) 组=1001(mysql123)


# 创建名为mysql的系统用户,将其添加到mysql123用户组中,并设置其登录shell为/bin/false,以限制该用户的登录权限
#(-r创建一个系统账户,-g指定基本组,-s指定用户登录后使用的Shell)

切换到/usr/local/mysql目录,并创建备份目录mysql-files

bash 复制代码
root@ubuntu:~# cd /usr/local/mysql/
root@ubuntu:/usr/local/mysql# ls
bin  docs  include  lib  LICENSE  man  README  share  support-files
root@ubuntu:/usr/local/mysql# mkdir mysql-files  #创建一个名为mysql-files的目录,用于存放MySQL数据文件,一般存储备份数据
root@ubuntu:/usr/local/mysql# ls
bin  docs  include  lib  LICENSE  man  mysql-files  README  share  support-files

设置mysql-files的用户和用户组,并修改权限

bash 复制代码
root@ubuntu:/usr/local/mysql# chown mysql:mysql123 mysql-files   #将mysql-files目录的所有者和所属组设置为mysql用户和mysql123组

root@ubuntu:/usr/local/mysql# chmod 750 mysql-files   #设置mysql-files目录的权限为750,以确保只有 "mysql" 用户组的成员可以读取、写入和执行该目录

root@ubuntu:/usr/local/mysql# ls -ldh mysql-files
drwxr-x--- 2 mysql mysql123 4.0K  5月  3 23:40 mysql-files

初始化

bash 复制代码
root@ubuntu:/usr/local/mysql# ls
bin  docs  include  lib  LICENSE  man  mysql-files  README  share  support-files
root@ubuntu:/usr/local/mysql# cd bin
root@ubuntu:/usr/local/mysql/bin# ls    
ibd2sdi         my_print_defaults    mysqld         mysql_migrate_keyring      mysql_upgrade
innochecksum    mysql                mysqld-debug   mysqlpump                  perror
lz4_decompress  mysqladmin           mysqld_multi   mysql_secure_installation  zlib_decompress
myisamchk       mysqlbinlog          mysqld_safe    mysqlshow
myisam_ftdump   mysqlcheck           mysqldump      mysqlslap
myisamlog       mysql_config         mysqldumpslow  mysql_ssl_rsa_setup
myisampack      mysql_config_editor  mysqlimport    mysql_tzinfo_to_sql

root@ubuntu:/usr/local/mysql/bin# cd ..
root@ubuntu:/usr/local/mysql# ./bin/mysqld --initialize --user=mysql
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
#出现报错的原因是:没有检测到libaio.so.1这个软件包
#解决步骤:我们先在本地查找这个包,如果有,则只需要添加一个软链接。如果没有这个包,则需要使用yum或者apt下载

root@ubuntu:/usr/local/mysql# find / -name 'libaio.so*'
root@ubuntu:/usr/local/mysql#  #本地没有这个包

root@ubuntu:/usr/local/mysql# apt update
root@ubuntu:/usr/local/mysql# apt install libaio* -y   #下载这个包

root@ubuntu:/usr/local/mysql# find / -name 'libaio.so*'
/usr/lib/x86_64-linux-gnu/libaio.so
/usr/lib/x86_64-linux-gnu/libaio.so.1    #刚好下了这个包
/usr/lib/x86_64-linux-gnu/libaio.so.1.0.1


root@ubuntu:/usr/local/mysql# ./bin/mysqld --initialize --user=mysql   #注意:需要复制密码
2024-05-03T15:56:11.688745Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.37) initializing of server in progress as process 32831
2024-05-03T15:56:11.717419Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-05-03T15:56:12.411301Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-05-03T15:56:17.608361Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Ert;OwHgr5q(

root@ubuntu:/usr/local/mysql# ./bin/mysql_ssl_rsa_setup   #支持ssl,用于安全通信

root@ubuntu:/usr/local/mysql# ./bin/mysqld_safe --user=mysql  #使用后台方式以mysql用户身份启动MySQL服务器,mysqld_safe是一个用于启动和监控MySQL服务器的脚本(相当于systemctl start mysqld)
Logging to '/usr/local/mysql/data/ubuntu.err'.
2024-05-03T15:59:43.654716Z mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data

#注意:此时上述命令执行完毕处于后台运行状态,需要另行启动一个终端
bash 复制代码
root@ubuntu:~# cd /usr/local/mysql
root@ubuntu:/usr/local/mysql# ls
bin  data  docs  include  lib  LICENSE  man  mysql-files  README  share  support-files
root@ubuntu:/usr/local/mysql#cd

root@ubuntu:~# ps -ef | grep mysql    #查看进程运行状态
root       32880   20204  0 5月03 pts/4   00:00:00 /bin/sh ./bin/mysqld_safe --user=mysql
mysql      32949   32880  1 5月03 pts/4   00:00:04 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=ubuntu.err --pid-file=ubuntu.pid
root       33267   33246  0 00:04 pts/2    00:00:00 grep --color=auto mysql

root@ubuntu:~# cd /usr/local/mysql
root@ubuntu:/usr/local/mysql# ./bin/mysql -uroot -p    #登录mysql
./bin/mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
#出现报错的原因是:没有检测到libncurses.so.5这个软件包
#解决步骤:我们先在本地查找这个包,如果有,则只需要添加一个软链接。如果没有这个包,则需要使用yum或者apt下载

root@ubuntu:/usr/local/mysql# find / -name libncurses.so*
/usr/lib/x86_64-linux-gnu/libncurses.so.6.3
/usr/lib/x86_64-linux-gnu/libncurses.so.6
/snap/core22/1380/usr/lib/x86_64-linux-gnu/libncurses.so.6
/snap/core22/1380/usr/lib/x86_64-linux-gnu/libncurses.so.6.3
/snap/core22/1122/usr/lib/x86_64-linux-gnu/libncurses.so.6
/snap/core22/1122/usr/lib/x86_64-linux-gnu/libncurses.so.6.3


root@ubuntu:/usr/local/mysql# ln -s /usr/lib/x86_64-linux-gnu/libncurses.so.6   /usr/lib/x86_64-linux-gnu/libncurses.so.5   #做软链接解决

root@ubuntu:/usr/local/mysql# ./bin/mysql -uroot -p  #继续登录
./bin/mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
#出现报错的原因是:没有检测到libtinfo.so.5这个软件包
#解决步骤:我们先在本地查找这个包,如果有,则只需要添加一个软链接。如果没有这个包,则需要使用yum或者apt下载

root@ubuntu:/usr/local/mysql# find / -name libtinfo.so*                                            /usr/lib/x86_64-linux-gnu/libtinfo.so.6
/usr/lib/x86_64-linux-gnu/libtinfo.so.6.3
/snap/core22/1380/usr/lib/x86_64-linux-gnu/libtinfo.so.6
/snap/core22/1380/usr/lib/x86_64-linux-gnu/libtinfo.so.6.3
/snap/core22/1122/usr/lib/x86_64-linux-gnu/libtinfo.so.6
/snap/core22/1122/usr/lib/x86_64-linux-gnu/libtinfo.so.6.3


root@ubuntu:/usr/local/mysql# ln -s /usr/lib/x86_64-linux-gnu/libtinfo.so.6   /usr/lib/x86_64-linux-gnu/libtinfo.so.5   #做软链接解决

root@ubuntu:/usr/local/mysql# ./bin/mysql -uroot -p      #继续登录,发现登录成功                                          
Enter password:      #输入前面我们复制的密码,进入MySQL
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.37

Copyright (c) 2000, 2024, 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> show databases; 
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
#报错原因:没有重置密码
#解决方式:重置密码
mysql> ALTER USER 'root'@'localhost' identified by '123456';  #重置密码为123456
Query OK, 0 rows affected (0.02 sec)

mysql> flush privileges;   #刷新
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye
root@ubuntu:/usr/local/mysql# ./bin/mysql -uroot -p
Enter password:            #输入密码123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.37 MySQL Community Server - GPL

Copyright (c) 2000, 2024, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> exit
Bye

root@ubuntu:/usr/local/mysql# ps -ef | grep mysql
root       32880   20204  0 5月03 pts/4   00:00:00 /bin/sh ./bin/mysqld_safe --user=mysql
mysql      32949   32880  1 5月03 pts/4   00:00:15 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=ubuntu.err --pid-file=ubuntu.pid
root       33304   33246  0 00:22 pts/2    00:00:00 grep --color=auto mysql
root@ubuntu:/usr/local/mysql# kill -9 32880 20204 32949    #在当前终端关闭运行的mysql
root@ubuntu:/usr/local/mysql# ps -ef | grep mysql
root       33308   33246  0 00:24 pts/2    00:00:00 grep --color=auto mysql

设置mysql的配置文件(使其可以通过systemctl命令启动)

bash 复制代码
root@ubuntu:/usr/local/mysql# cd
root@ubuntu:~# vim /etc/my.cnf    #新建mysql主配置文件,输入以下内容:
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
server-id = 1
port = 3306
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
tmpdir = /tmp
socket = /tmp/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
default-storage-engine=INNODB
log_error = error.log


# 注意:以下是上述配置文件的解释
[client]      # 客户端设置
port = 3306   # 默认端口号
socket = /tmp/mysql.sock   # 启动套接字 (启动文件)

[mysqld]
###############################基础设置#####################################
server-id = 1      # Mysql服务的唯一编号 每个mysql服务Id需唯一
port = 3306        # 端口号 3306
basedir = /usr/local/mysql     # mysql安装根目录
datadir = /usr/local/mysql/data    # mysql数据文件所在位置 没有改目录则创建
tmpdir = /tmp    # 临时目录 比如load data infile会用到
socket = /tmp/mysql.sock   # 设置socke文件所在目录
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
default-storage-engine=INNODB
###############################日志设置#####################################
#数据库错误日志文件
log_error = error.log

将启动脚本mysql.server复制到/etc/init.d/

bash 复制代码
root@ubuntu:~# cd /usr/local/mysql/
root@ubuntu:/usr/local/mysql# ls
bin  data  docs  include  lib  LICENSE  man  mysql-files  README  share  support-files
root@ubuntu:/usr/local/mysql# cd support-files/
root@ubuntu:/usr/local/mysql/support-files# ls
mysqld_multi.server  mysql-log-rotate  mysql.server

root@ubuntu:/usr/local/mysql/support-files# cp -a mysql.server   /etc/init.d/mysql.server   #拷贝启动脚本,可能报错,如果报错,需要安装chkconfig来解决
root@ubuntu:/usr/local/mysql/support-files# apt install  chkconfig -y   #安装修通服务配置的包
root@ubuntu:/usr/local/mysql/support-files# cp -a mysql.server   /etc/init.d/mysql.server

root@ubuntu:/usr/local/mysql/support-files# cd  /etc/init.d 
root@ubuntu:/etc/init.d# vim mysql.server    #增加=之后的内容
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

root@ubuntu:/etc/init.d# cd
root@ubuntu:~# systemctl daemon-reload   #重载系统配置
root@ubuntu:~# systemctl start mysql  #启动MySQL
root@ubuntu:~# systemctl status mysql  #查看MySQL服务的状态
● mysql.server.service - LSB: start and stop MySQL
     Loaded: loaded (/etc/init.d/mysql.server; generated)
     Active: active (running) since Sat 2024-05-04 00:54:19 CST; 8s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 34097 ExecStart=/etc/init.d/mysql.server start (code=exited, status=0/SUCCESS)
      Tasks: 39 (limit: 2217)
     Memory: 360.7M
        CPU: 2.484s
     CGroup: /system.slice/mysql.server.service
             ├─34111 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pi>
             └─34361 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/m>

配置系统环境变量

  • 配置系统环境变量使其mysql命令可以在任意目录下执行
bash 复制代码
root@ubuntu:~# mysql -uroot -p
找不到命令 "mysql"

root@ubuntu:~# vim ~/.profile    #永久性修改系统环境变量
#在最后一行添加
export PATH=$PATH:/usr/local/mysql/bin  

root@ubuntu:~# source ~/.profile    #重新加载.profile文本
root@ubuntu:~# mysql -uroot -p
Enter password:    #输入密码123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.37 MySQL Community Server - GPL

Copyright (c) 2000, 2024, 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>

总结

export PATH=$PATH:/usr/local/mysql/bin

  • Linux系统中,export PATH=$PATH:/usr/local/mysql/bin 是一个常见的命令,用于修改当前shell会话中的PATH环境变量。这个命令的作用是将/usr/local/mysql/bin目录添加到PATH环境变量的末尾,使得你可以直接通过命令名(如mysql)来运行位于该目录下的可执行文件,而无需指定完整的文件路径。

具体来说:

  • PATH 是一个环境变量,它定义了shell在查找命令时要搜索的目录列表。当你输入一个命令名时,shell会在PATH中列出的目录中查找该命令的可执行文件。
  • $PATH 是对当前PATH环境变量值的引用。在这个命令中,你通过$PATH来获取当前PATH的值,并将其存储在变量中以便稍后进行修改。
  • : 是目录分隔符,用于将新的目录添加到PATH中。
  • /usr/local/mysql/bin 是你想要添加到PATH中的目录路径。这个目录通常包含MySQL的客户端工具和其他可执行文件。

因此,export PATH=$PATH:/usr/local/mysql/bin 命令的作用是将/usr/local/mysql/bin目录添加到PATH环境变量的末尾,并通过export命令将修改后的PATH值导出到当前shell会话中。这样,你就可以在命令行中直接运行位于/usr/local/mysql/bin目录下的MySQL命令了。

  • 注意:这个命令只会影响当前的shell会话。如果你想要永久地修改PATH环境变量,你需要将这条命令添加到你的shell配置文件中(如~/.bashrc~/.bash_profile~/.zshrc等),这样每次启动新的shell会话时都会自动执行这条命令。

source

  • Bash 或其他类似的 shell 环境中,source 命令(或者其等价命令 .,即一个点号)用于在当前 shell 会话中读取并执行指定文件中的命令。这通常用于重新加载或运行配置文件,如 .bashrc.bash_profile.profile.zshrc 等,以便在当前会话中立即应用更改,而无需退出并重新登录。

例如,如果你想要重新加载你的 .bashrc 文件,你可以这样做:

bash 复制代码
[root@node1 ~]# source ~/.bashrc

或者

bash 复制代码
[root@node1 ~]# . ~/.bashrc

/etc/init.d/

/etc/init.d/ 是一个在Linux系统中常见的目录,主要用于存放系统初始化(init)脚本。这些脚本通常用于启动、停止、重启或查询系统服务或进程的状态。

在现代Linux发行版中,如Ubuntu(从15.04开始)和许多其他基于Debian的发行版,已经全面迁移到使用systemd作为其初始化系统。systemd使用.service.target.timer等单元文件来定义服务和其他系统资源,这些文件通常存储在/etc/systemd/system//lib/systemd/system//run/systemd/system/目录中。

尽管如此,/etc/init.d/ 目录在许多Linux发行版中仍然存在,主要是为了向后兼容和允许管理员或用户手动运行这些脚本。在systemd中,你可以使用systemctl命令与这些传统的init脚本进行交互,尽管systemd提供了更强大和灵活的服务管理功能。

例如,你可以使用以下命令来手动启动、停止或重启/etc/init.d/目录中的一个脚本(假设该脚本与systemd兼容):

  • 启动服务:service 服务名 start/etc/init.d/服务名 start
  • 停止服务:service 服务名 stop/etc/init.d/服务名 stop
  • 重启服务:service 服务名 restart/etc/init.d/服务名 restart
  • 查询服务状态:service 服务名 status/etc/init.d/服务名 status

但是,请注意,这些命令在基于systemd的系统中实际上是通过调用systemd的兼容性层来实现的。因此,尽管你可以使用这些命令来管理服务,但最好还是使用systemctl命令来充分利用systemd的功能。

bash 复制代码
root@ubuntu:/etc/init.d# ls
acpid             cups-browsed       mysql.server                 speech-dispatcher
alsa-utils        dbus               nginx                        spice-vdagent
anacron           gdm3               openvpn                      ssh
apparmor          grub-common        openvswitch-switch           udev
apport            hwclock.sh         plymouth                     ufw
avahi-daemon      irqbalance         plymouth-log                 unattended-upgrades
bluetooth         kerneloops         procps                       uuidd
console-setup.sh  keyboard-setup.sh  pulseaudio-enable-autospawn  whoopsie
cron              kmod               rsync                        x11-common
cups              lighttpd           saned

root@ubuntu:/etc/init.d# ./lighttpd start   #开启httpd服务
Starting lighttpd (via systemctl): lighttpd.service.
root@ubuntu:/etc/init.d# ./lighttpd status   #查看httpd服务的状态
● lighttpd.service - Lighttpd Daemon
     Loaded: loaded (/lib/systemd/system/lighttpd.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2024-05-04 01:37:31 CST; 3s ago
    Process: 35184 ExecStartPre=/usr/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf (code=exited, status=0/SUCCESS)
   Main PID: 35189 (lighttpd)
      Tasks: 1 (limit: 2217)
     Memory: 832.0K
        CPU: 485ms
     CGroup: /system.slice/lighttpd.service
             └─35189 /usr/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
相关推荐
Komorebi.py1 小时前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh1 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
中云DDoS CC防护蔡蔡2 小时前
微信小程序被攻击怎么选择高防产品
服务器·网络安全·微信小程序·小程序·ddos
远歌已逝3 小时前
维护在线重做日志(二)
数据库·oracle
HPC_fac130520678163 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
yaoxin5211234 小时前
第二十七章 TCP 客户端 服务器通信 - 连接管理
服务器·网络·tcp/ip
qq_433099404 小时前
Ubuntu20.04从零安装IsaacSim/IsaacLab
数据库
内核程序员kevin4 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
Dlwyz4 小时前
redis-击穿、穿透、雪崩
数据库·redis·缓存
工业甲酰苯胺6 小时前
Redis性能优化的18招
数据库·redis·性能优化