文章目录
- 1.环境
- 2.安装准备
- 3.编译安装过程
- 4.补充:关于mysql添加用户,删除用户、给用户受权,设置用户密码等
1.环境
一台CentOS7.6.3的机器php
2.安装准备
下载mysql-5.7.31源码包
1.登陆网站https://dev.mysql.com/downloads/mysql/,如图:
2.选择Source Code
选择好后以下图展现:
3.上图显示的都是8以上版本的,咱们要下载5.7.31版本,因此继续走下去,点击红色方框的内容
点击上图红色方框的内容以后,显示以下图,这时候就看到5.7.31版本了:
4.选择好mysql版本以后咱们还要选择与系统匹配的版本,以下图选择红色大箭头的那一列,咱们的环境的CentOS7:
选择好以后以下图,点击Download便可下载mysql-5.7.31的源码包:
mysql
下载完以后将mysql-community-5.7.31-1.el7.src.rpm传到CentOS7.6.3机器上c++
安装mysql-community-5.7.31-1.el7.src.rpm:
[root@test2 ~]# rpm -ivh mysql-community-5.7.31-1.el7.src.rpm
#安装完后会在当前用户的家目录生成一个目录rpmbuildsql
咱们须要的boost源码包跟mysql-5.7.31源码包都在在rpmbuild目录下的SOURCES目录下
[root@test2 ~/rpmbuild/SOURCES]# ll
total 153656
-rw-r–r-- 1 root root 70389425 Jun 2 19:26 boost_1_59_0.tar.bz2
-rwxr-xr-x 1 root root 160 Jun 2 19:26 filter-provides.sh
-rwxr-xr-x 1 root root 176 Jun 2 19:26 filter-requires.sh
-rw-r–r-- 1 root root 32525559 Jun 2 19:26 mysql-5.6.45.tar.gz
-rw-r–r-- 1 root root 54418341 Jun 2 17:18 mysql-5.7.31.tar.gz数据库
3.编译安装过程
1.安装环境依赖包
[root@test2 ~/rpmbuild/SOURCES]# yun -y install ncurses ncurses-devel bison
还须要安装cmake,cmake看我的是用yum源的cmake,仍是本身找高点的版本编译安装
由于搭建LNMP环境,若是使用php版本比极高的话,可能须要libzip,而安装libzip须要cmake,若是编译安装libzip的版本较高的话,yum源自带的cmake版本比较低可能会引发一些问题
vim
2.建立用户
[root@test2 ~/rpmbuild/SOURCES]# useradd -s /sbin/nologin mysql服务器
3.将安装包解压缩放在指定的目录中
[root@test2 ~/rpmbuild/SOURCES]# tar -jxvf boost_1_59_0.tar.bz2 -C /home/opsapp
若是你的机器没有安装bzip2,会报如下错误:
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
解决办法:
[root@test2 ~/rpmbuild/SOURCES]# yum -y install bzip2socket
[root@test2 ~/rpmbuild/SOURCES]# tar -zxvf mysql-5.7.31.tar.gz -C /home/opstcp
4.将解压后的boost更名
[root@test2 ~/rpmbuild/SOURCES]# mv boost_1_59_0/ boost
5.安装软件依赖包
[root@test2 ~/rpmbuild/SOURCES]# yum -y install gcc gcc-c++
6.编译安装msyql
cd /home/ops/mysql-5.7.31/
[root@test2 /home/ops/mysql-5.7.31]# cmake
-DCMAKE_INSTALL_PREFIX=/home/ops/mysql
-DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock
-DSYSCONFDIR=/etc
-DSYSTEMD_PID_DIR=/home/ops/mysql
-DMYSQL_TCP_PORT=3306
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DENABLED_LOCAL_INFILE=1
-DWITH_EXTRA_CHARSETS=1
-DEXTRA_CHARSETS=all
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
-DMYSQL_DATADIR=/home/ops/mysql/data
-DWITH_BOOST=/home/ops/boost
-DWITH_SYSTEMD=1
为了方便复制因此加了这段
cmake -DCMAKE_INSTALL_PREFIX=/home/ops/mysql -DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/home/ops/mysql -DMYSQL_TCP_PORT=3306 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=1 -DEXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/home/ops/mysql/data -DWITH_BOOST=/home/ops/boost -DWITH_SYSTEMD=1
-DCMAKE_INSTALL_PREFIX=/home/ops/mysql #指定安装路径 -DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock #mysql.sock文件生成路径,发起本地链接时使用 -DSYSCONFDIR=/etc #配置文件路径 -DSYSTEMD_PID_DIR=/home/ops/mysql #PID文件指定路径 -DMYSQL_TCP_PORT=3306 #msyql监听端口 -DDEFAULT_CHARSET=utf8 #指定默认字符集 -DDEFAULT_COLLATION=utf8_general_ci #校验字符,指定默认编码 -DENABLED_LOCAL_INFILE=1 #容许从本地导入数据 -DWITH_EXTRA_CHARSETS=1 #支持额外的字符集 -DEXTRA_CHARSETS=all #安装全部扩展字符集 -DWITH_INNOBASE_STORAGE_ENGINE=1 #安装innodb存储引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 #安装archive 存储引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 #安装blackhole存储引擎 -DWITH_MYISAM_STORAGE_ENGINE=1 #安装myisam存储引擎 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 #安装FEDERATED存储引擎 -DMYSQL_DATADIR=/home/ops/mysql/data #指定数据存放路径 -DWITH_BOOST=/home/ops/boost #boost库主要是在对mysql的数据备份时用到 -DWITH_SYSTEMD=1 #这是MySQL 5.7原生支持Systemd的选项,若是要是用systemctl启动,就必须开启
报错1:
CMake Error at cmake/boost.cmake:88 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,
it will download and unpack it (in that directory) for you.
If you are inside a firewall, you may need to use an http proxy:
export http_proxy=http://example.com:80
Call Stack (most recent call first):
cmake/boost.cmake:174 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:548 (INCLUDE)
-- Configuring incomplete, errors occurred!
See also "/home/wuyoupin/data/server/mysql-5.7.31/CMakeFiles/CMakeOutput.log".
See also "/home/wuyoupin/data/server/mysql-5.7.31/CMakeFiles/CMakeError.log".
缘由:
-DWITH_BOOST=/home/hahaha/data/server/boost 这里的boost库路径指定不对
解决办法:
1.修正-DWITH_BOOST=
boost库的路径,在第4步那里,boost_1_59_0目录被移动到哪里,就填哪里的绝对路径
2.从新cmake
报错2:
CMake Error at cmake/readline.cmake:71 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and >derivates it isncurses-devel
.
Call Stack (most recent call first):
cmake/readline.cmake:102 (FIND_CURSES)
cmake/readline.cmake:195 (MYSQL_USE_BUNDLED_EDITLINE)
CMakeLists.txt:582 (MYSQL_CHECK_EDITLINE)
– Configuring incomplete, errors occurred!
See also “/home/ops/mysql-5.7.31/CMakeFiles/CMakeOutput.log”.
See also “/home/ops/mysql-5.7.31/CMakeFiles/CMakeError.log”.
缘由:
缺乏ncurses-devel支持包
解决:
yum -y install ncurses-devel
注意:若是在CMAKE的过程当中有报错,当报错解决后,须要把源码目录中的CMakeCache.txt文件删除,而后再从新Cmake
7.编译安装
[root@test2 /home/ops/mysql-5.7.31]# make && make install #编译过程有点久,耐心等待咯
8.建立mysql数据文件存放目录,修改mysql工做目录的全部者跟所属组
[root@test2 /home/ops/mysql-5.7.31]# cd …/mysql
[root@test2 /home/ops/mysql]# mkdir data
[root@test2 /home/ops/mysql]# cd …
[root@test2 /home/ops]# chown -R mysql:mysql mysql
9.将配置声明到环境变量中
[root@test2 /home/ops]# vim /etc/profile
以下图:在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
前面添加export PATH=$PATH:/home/ops/mysql/bin
注意:
/home/ops/mysql/bin
这个路径视状况而定,另外export PATH=$PATH:/home/ops/mysql/bin
添加的位置也不是固定的,能够添加到文件的其余地方,尽可能添加到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
的上面
[root@test2 /home/ops]# source /etc/profile
10.调整配置文件
[root@test2 /home/ops]# vim /etc/my.cnf
[client] port=3306 socket=/home/ops/mysql/mysql.sock [mysqld] basedir=/home/ops/mysql datadir=/home/ops/mysql/data socket=/home/ops/mysql/mysql.sock #Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #Settings user and group are ignored when systemd is used. #If you need to run mysqld under a different user or group, #customize your systemd unit file for mariadb according to the #instructions in http://fedoraproject.org/wiki/Systemd #skip-grant-tables [mysqld_safe] log-error=/home/ops/mysql/mysql-error.log pid-file=/home/ops/mysql/mysql.pid #include all files from the config directory !includedir /etc/my.cnf.d
注意:若是编译安装mysql以后没有在/etc/目录下生成配置文件,直接新建一个,按本身需求添加配置就行了
11.初始化数据库
[root@test2 /home/ops]# cd mysql
[root@test2 /home/ops/mysql]# bin/mysqld
–initialize
–user=mysql
–basedir=/home/ops/mysql
–datadir=/home/ops/mysql/data/
下面一段是为了方便复制,就是初始化的命令
bin/mysqld --initialize --user=mysql --basedir=/home/ops/mysql --datadir=/home/ops/mysql/data/
初始化数据库输出信息:
2020-08-26T06:49:25.448942Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2020-08-26T06:49:26.475806Z 0 [Warning] InnoDB: New log files created, LSN=45790 2020-08-26T06:49:26.672309Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2020-08-26T06:49:26.736700Z 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: 4882c7d8-e768-11ea-b1ec-00163e0d400a. 2020-08-26T06:49:26.738847Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2020-08-26T06:49:27.043038Z 0 [Warning] CA certificate ca.pem is self signed. 2020-08-26T06:49:27.148709Z 1 [Note] A temporary password is generated for root@localhost: )dZfe<.n&5_r
#本次初始化随机密码为:)dZfe<.n&5_r
,在输出信息的最后一行找
12.将service服务启动脚本放到systemd目录下执行
[root@test2 /home/ops/mysql]# cp /home/ops/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
13.从新加载、启动服务、查看端口状态
[root@test2 /home/ops/mysql]# systemctl daemon-reload [root@test2 /home/ops/mysql]# systemctl start mysqld [root@test2 /home/ops/mysql]# netstat -ntap | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 3103/mysqld
能够看到3306端口已经起来了,说明mysqld服务已经起来了
systemctl daemon-reload: 从新加载某个服务的配置文件,若是新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需从新加载。
14.链接数据库
[root@test2 /home/ops/mysql]# mysql -uroot -p’)dZfe<.n&5_r’
看到上面的页面说明mysql5.7.31编译安装成功了!
15.修改当前用户(root)密码
mysql> set password=password("123456"); Query OK, 0 rows affected, 1 warning (0.00 sec)
16.测试新密码
[root@test2 /home/ops/mysql]# mysql -uroot -p’123456’
17.受权远程登陆,而且设定root用户的权限
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL ON *.* TO 'root'@'%'; Query OK, 0 rows affected (0.00 sec)
18.随便建立一个库,方便另外一台机器远程测试
mysql> create database test;
#建立test库成功
19.远程登陆测试,从另外一台机器链接数据库
[root@test1 ]# mysql -uroot -h数据库所在的主机ip -p’123456’
测试成功!
4.补充:关于mysql添加用户,删除用户、给用户受权,设置用户密码等
1.建立用户
mysql> CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;
username 将要建立的用户名
host 指定该用户在哪一个主机上能够登陆,若是是本地用户则可使用localhost,若是想要该用户能够从任意主机远程登陆数据库服务器,则可使用通配符%
password 将要建立的用户的密码,密码能够设置为空,若是为空则该用户不须要密码登陆数据库服务器
实例:
CREATE USER 'test'@'localhost' IDENTIFIED BY '123456'; CREATE USER 'test1'@'192.168.0.0/255.255.0.0' IDENDIFIED BY '123456'; CREATE USER 'test3'@'%' IDENTIFIED BY '123456'; CREATE USER 'teest4'@'%' IDENTIFIED BY ''; CREATE USER 'test5'@'%';
2.受权
mysql> GRANT authority ON databasename.tablename TO ‘username’@‘host’;
authority 用户操做权限,如SELECt , INSERT , UPDATE 等,若是要授予用户全部的权限,则使用ALL表示
databasename 数据库名
tablename 表名
若是要授予用户对全部的数据库,全部的表都有相应的权限则能够用*
表示。如*.*
实例:
GRANT SELECT, INSERT ON test.table1 TO 'test'@'%'; GRANT ALL ON *.* TO 'test1'@'%';
注意:用以上命令受权的用户不能给其余用户受权,若是想要让该用户也能够给其余用户受权,则用如下命令
GRANT authority ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;
3.设置与更改用户密码
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
若是是当前用户,则能够
SET PASSWORD = PASSWORD("newpassword");
4.撤销用户权限
REVOKE authority ON databasename.tablename FROM 'username'@'host';
假如你在给用户’test’@’%’受权的时候使用的是:GRANT SELECt ON test.user TO 'test'@'%';
这种方式, 则在使用 REVOKE SELECT ON *.* FROM 'test'@'%';
命令并不能撤销该用户对test数据库中user表的SELECt权限
相反的,若是受权使用的是GRANT SELECT ON *.* TO 'test'@'%';
,则 REVOKE SELECT ON test.user FROM 'test'@'%';
命令也不能撤销该用户对test数据库中user表的 Select 权限
5.查看用户权限
SHOW GRANTS FOR 'test'@'%';
6.删除用户
DROP USER 'username'@'host';
7.每一次操做后都要记得刷新数据库
flush privileges;