一、glibc源码安装
1、准备环境
- 关闭selinux
[root@db1 ~]# getenforce #查看selinux状态
Permissive #selinux的三种状态:enforcing:强制模式,permissive:警告模式,disabled:关闭
[root@db1 ~]# vim /etc/selinux/config #修改配置文件,永久更改selinux开机状态
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@db1 ~]# reboot #重启服务器
[root@db1 ~]# getenforce
- 关闭firewalld
[root@db1 ~]# systemctl disable firewalld --now
[root@db1 ~]# systemctl status firewalld
- 卸载mariadb
[root@db1 ~]# rpm -qa | grep mariadb #查看是否安装mariadb
[root@db1 ~]# yum remove mariadb #卸载mariadb
[root@db1 ~]# yum remove mariadb-lib
2、安装mysql
- 安装依赖包
[root@db1 ~]# yum -y install cmake gcc-c++ ncurses-devel perl-data-Data-Dumper boost boost-doc boost-devel numactl libaio
- 上传包并解压
[root@db1 ~]# tar -zxvf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
[root@db1 ~]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql/
[root@db1 ~]# groupadd mysql
[root@db1 ~]# useradd -r -g mysql mysql
[root@db1 ~]# mkdir /usr/local/mysql/data
[root@db1 ~]# mkdir /usr/local/mysql/log
[root@db1 ~]# mkdir /usr/local/mysql/tmp
[root@db1 ~]# mkdir /usr/local/mysql/run
[root@db1 ~]# chown -R mysql.mysql /usr/local/mysql
- 修改配置文件(根据实际需求自定义参数)
[root@db1 ~]# vim /etc/my.cnf
[mysqld]
user=mysql
port=3306
default-storage-engine=InnoDB
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/tmp/mysql.sock
log-error=/usr/local/mysql/log/mysql-error.log
pid-file=/usr/local/mysql/run/mysqld.pid
explicit_defaults_for_timestamp=true
lower_case_table_names=1
max_allowed_packet = 1000M
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_tmp_tables=100
max_heap_table_size=1024M
tmp_table_size=1024M
slave_skip_errors=1062
max_connections=10000
[client]
port=3306
socket=/usr/local/mysql/tmp/mysql.sock
[mysqld_safe]
open-files-limit=8192
- 修改环境变量:
[root@db1 ~]# echo "PATH=/usr/local/mysql/bin/:$PATH" >> /etc/profile #添加配置
[root@db1 ~]# source /etc/profile #重新加载配置,使配置生效
- 执行初始化命令:
[root@db1 ~]# /usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
3、连接mysql
- 初始化成功后,查看日志获取root初始密码
[root@db1 ~]# cat /usr/local/mysql/log/mysql-error.log
2023-02-06T07:29:57.376120Z 0 [Warning] InnoDB: New log files created, LSN=45790
2023-02-06T07:29:57.451967Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2023-02-06T07:29:57.524680Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 0eac1775-a5f0-11ed-bbff-fefcfe926edb.
2023-02-06T07:29:57.528768Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2023-02-06T07:29:57.533491Z 1 [Note] A temporary password is generated for root@localhost: AyEshG-6!:1)
#上面输出中A temporary password is generated for root@localhost:后面的
AyEshG-6!:1)
为mysql的初始化密码
- 使用初始密码连接mysql,连接后要立即修改root密码
[root@db1 ~]# mysql -uroot -p'AyEshG-6!:1)'
mysql>
mysql> alter user root@"localhost" identified by "Mysql.2022";
mysql>
- 授权远程连接用户:
mysql> grant all on *.* to mysql@"%" identified by "Mysql.2022";
4、扩展
1、如果登录root用户时提示密码过期无法登录,可以用一下方法解决:
设置密码过期规则(取消密码过期)
- 用忽略授权表的方式进入mysql
[root@db1 ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables
- 进入mysql,查看root用户的详细信息
sql> select * from mysql.user where user='root'\G
password_expired: Y
- 把password_expired 改成不过期
sql> update user set password_expired='N' where user='root'
sql> flush privileges; #立即生效
2、将mysql加入到系统服务中
如果是自己通过tar包安装的Mysql,不会自动添加到系统服务中,可通过如下方式,自己添加。
- 查看pid路径:
方法一:
1.先启动一下mysql
[root@db1 ~]# ${mysql}/support-files/mysql.server start
2.成功后,通过ps命令查看pid文件路径
[root@db1 ~]# ps -ef | grep mysql
方法二:
直接查看mysql配置文件my.cnf
[root@db1 ~]# cat /etc/my.cnf | grep pid-file
pid-file=/usr/local/mysql/run/mysql.pid
- 在/usr/lib/systemd/system目录下增加mysqld.service,内容如下
[root@db1 ~]# vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=Mysql
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/mysql/run/mysql.pid
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecReload=/usr/local/mysql/support-files/mysql.server reload
ExecStop=/usr/local/mysql/support-files/mysql.server stop
PrivateTmp=false
[Install]
WantedBy=multi-user.target
- 重新载入单元,扫描新的或有变化的单元,使刚刚添加的mysql.service生效
[root@db1 ~]# systemctl daemon-reload
- 切换服务
[root@db1 ~]# ${mysql}/support-files/mysql.server stop #停服务
[root@db1 ~]# systemcel enable mysql --now #使用systemctl启动服务