华子目录
- 作用
- 二进制包下载
- 上传二进制包
- 解压
- 移动包到常规PATH路径下
- 创建mysql用户组
- 创建mysql用户,并指定用户组
- 切换到`/usr/local/mysql`目录,并创建备份目录`mysql-files`
- 设置`mysql-files`的用户和用户组,并修改权限
- 初始化
- 设置mysql的配置文件(使其可以通过systemctl命令启动)
- 配置系统环境变量
- 总结
-
- [`export PATH=PATH:/usr/local/mysql/bin \`](#`export PATH=PATH:/usr/local/mysql/bin `)
- `source`
- `/etc/init.d/`
作用
二进制包
:源码包经过成功编译之后产生的包优点
:由于二进制包在发布之前就已经完成了编译的工作,因此用户安装软件的速度较快注意
:在生产环境中通用二进制包安装方法较为常用
二进制包下载
上传二进制包
- 使用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