CentOS7.4自定义安装MySQL

本文系本人装机记录及总结。中间参考诸多网上的博文。如部分内容上有侵权,请联系本人修改,谢谢!

MySQL安装有两种:源码自编译安装和编译过的二进制文件进行安装。后一种方法相比源码安装,节省了差不多半个小时的编译时间,只需要合理配置即可。网上有很多教程,但是对于想要把MySQL安装到指定路径的博文却很少,而且还有很多漏洞。这里记录下安装MySQL 5.7.23的过程。

环境:CentOS 7.4、MySQL 5.7.23 64位

“请使用root用户操作”

Step1.准备安装mysql的依赖

yum -y install libaio  

Step2.新建mysql用户和组,用于设置mysql安装目录文件所有者和所属组

groupadd mysql
useradd -r -g mysql mysql

注:
(1)useradd -r 参数表示mysql用户是系统用户,不可用于登录系统
(2)useradd -g 参数表示把mysql用户添加到mysql用户组中

Step3.下载mysql安装包

mysql下载地址

mysql下载图示

可以使用wget,但是由于文件过大(600M),可以使用迅雷等下载后再上传

Step4.解压并赋予权限,同时创建data等目录

第一步:解压到指定目录,并重命名文件夹

(1)tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz 
(2)mv mysql-5.7.23-linux-glibc2.12-x86_64 /u01/mysql    

第二步:进入mysql,并新建data、tmp、log三个目录

cd /u01/mysql
mkdir tmp
mkdir log
mkdir data  

第三步:确保mysql下的文件属主都为mysql(下面的命令是在mysql目录下执行的)

chown -R mysql:mysql /u01/mysql/

--->这是因为下面的初始化需要指定一个用户mysql为了保证命令能够执行

Step5.初始化 MySQL 配置表

mysql5.7和之前版本不同,很多资料上都是这个命令:../scripts/mysql_install_db --user=mysql,而mysql5.7的mysql_install_db命令是在bin目录下的,并且建议用 mysqld --initialize命令

初始化数据库:进入mysql目录

cd /u01/mysql
./bin/mysqld --initialize --user=mysql --basedir=/u01/mysql --datadir=/u01/mysql/data

注释:
--user 启动mysql的用户
--basedir mysql安装目录
--datadir mysql数据仓库目录

  初始化成功后,注意最后一行,这也是和之有版本不同的地方,它给了root一个初始密码,后面要登录的时候要用到这个密码(下面是我记录的,大概就是这样,后面只能自己手打)
2018-08-26T12:30:35.676202Z 1 [Note] A temporary password is generated for root@localhost: g9cF

Step6. 还原权限

  将mysql/目录下除了data、tmp、log目录的所有文件,改回root用户所有,mysql用户只需作为mysql/data/目录下所有文件的所有者(下面的命令是在mysql目录下执行的)
(1)其他的所有属主全部还给root

cd /u01/mysql
chown -R root:root ./

(2)我们自己建的3个目录还是给mysql用户

cd /u01/mysql
chown -R mysql:mysql data
chown -R mysql:mysql tmp
chown -R mysql:mysql log

Step7.添加开机启动mysql服务

(1)复制/u01/mysql/support-files/mysql.server为/etc/init.d/mysqld

cp /u01/mysql/support-files/mysql.server /etc/init.d/mysqld

(2)添加mariadb.log,防止启动服务时出错(需要修改属主)

touch /u01/mysql/log/mariadb.log
chown -R mysql:mysql  /u01/mysql/log/

--每次使用root用户或者不消息系统用其他用户创建了文件,都要修改属主
--下面通过设置acl权限,可以自动为mysql用户设置相应目录下的文件的读写执行权限。
setfacl -R -m u:mysql:rwx tmp
setfacl -d --set u:mysql:rwx tmp
setfacl -R -m u:mysql:rwx log
setfacl -d --set u:mysql:rwx log
setfacl -R -m u:mysql:rwx data
setfacl -d --set u:mysql:rwx data
--取消acl权限
setfacl -x u:mysql data --去掉用户mysql的权限
setfacl -b data --删除data目录的所有的acl权限
--查看acl权限
getfacl mariadb.log

(3)增加软链,防止找不到mysql命令时出错

 ln -s /u01/mysql/bin/mysql /usr/bin 

如果想通过命令行进行其他的操作,可以直接将/mysql/bin添加到环境变量
(4)添加开机启动

chkconfig --add mysqld
chkconfig mysqld on

Step8.完整命令列示

yum install libaio  
groupadd mysql  
useradd -r -g mysql mysql  
wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz  
tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz  
mv mysql-5.7.23-linux-glibc2.12-x86_64 /mysql 
cd mysql  
mkdir data
mkdir tmp  
mkdri log  
chown -R mysql:mysql  ./  
./bin/mysqld --initialize --user=mysql --basedir=/mysql --datadir=/mysql/data
chown -R root:root ./  
chown -R mysql:mysql data
chown -R mysql:mysql tmp  
chown -R mysql:mysql log  
cp support-files/mysql.server /etc/init.d/mysqld 
touch /mysql/log/mariadb.log  
ln -s /data/server/mysql/bin/mysql /usr/bin  
chkconfig --add mysqld
chkconfig mysqld on  

Step9.修改配置文件

(1)修改** /etc/my.cnf**,把目录改为对应的路径

vim /etc/my.cnf

basedir=/u01/mysql
datadir=/u01/mysql/data
socket=/u01/tmp/mysql.sock 这个不要这样改,是个bug。使用默认
log-error=/u01/mysql/log/mariadb.log
pid-file=/u01/mysql/tmp/mariadb.pid

添加下面两个配置,指定字符集,保证中文OK
character_set_server = utf8
collation_server = utf8_general_ci

--在mysql中,查看字符集的命令 
show variables like '%character%';

(2)修改/etc/init.d/mysqld文件,把目录改为对应的路径

vim /etc/init.d/mysqld

basedir=/u01/mysql
datadir=/u01/mysql/data
bindir=/u01/mysql/bin
sbindir=/u01/mysql/bin
libexecdir=/u01/mysql/bin

-->后面三个参数主要在下面的if逻辑里

原始的配置文件

-->改成
修改后的配置文件

Step10. 启动服务

service mysqld start|stop|restart|status

会发现报错了:
Starting MySQL. ERROR! The server quit without updating PID file (/mysql/data/sunsn-centos74-64.pid).
但是检查配置文件,什么的都没有错,问题在哪?
问题在我们使用的root用户创建了mariadb.log这个文件。不手动创建也许不会有事,但既然问题出现了,就解决吧。再更改一下/mysql/log的属主
chown -R mysql:mysql /mysql/log
再启动一下,正常!!!!!

Step11.修改密码

情况1:有密码可以登录的情况。使用我们前面“初始化 MySQL 配置表“时记下的临时密码(g9cF (1)法1:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');

(2)法2:

mysql>UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
mysql> FLUSH PRIVILEGES;

情况2:不知道密码。这种稍微麻烦点

第1步:停止mysql服务

service mysqld stop

第2步:修改配置文件

vim /etc/my.cnf   

在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。

跳过密码验证的配置

第3步:重新启动mysql

service mysqld start

第4步:登录并修改MySQL的root密码
  直接敲mysql (直接就可以进去了)
第5步:变成情况一了,使用情况1的方法改密码
第6步:把配置文件的skip-grant-tables删除(改回去)重启就可以了

Step12.还差一点点,远程登录

网上很多教程都是直接介绍怎么使root用户可以远程连接的,这里不再拾人牙慧。而是贴近生产,新创建用户,并只给一个新的数据库赋予权限。

下面是创建项目数据库,并针对该项目数据库给用户赋权示例:(保证数据库安全)
1)使用root用户登录,先创建一个数据(比如test项目)

$ mysql -uroot -ppassword 
mysql>CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

2)进入mysql数据库

mysql>use mysql
  1. 创建新用户
CREATE USER 'test_user'@'localhost' IDENTIFIED BY '123456';

‘test_user’为新创建用户的用户名,
’123456’为用户密码
这里的localhost最好换成%,因为要使用这个用户从外网连进来。也可以使用如下命令修改

update user set host='%' where user='root';

之后在赋权之前,先使用flush privileges;刷新一下权限,否则,赋权会报错(找不到用户)
ERROR 1133 (42000): Can't find any matching row in the user table
4)为新用户赋予test数据库权限,其他库的不要给

GRANT SELECT, INSERT, UPDATE, REFERENCES, DELETE, CREATE, DROP, ALTER, INDEX, CREATE VIEW, SHOW VIEW ON `test`.* TO 'test_user'@'localhost';

ON后面的‘test’为数据库名,TO后面的 ‘test_user’表示用户, ‘localhost’表示只能本地访问,如果 想让所有IP都可以访问,可以将localhost换成 ‘*’星号,可以使用下面的命令:

grant all privileges on test.* to 'test_user'@'%';

5) 刷新权限

flush privileges;

阿里云推广:
通用代金券领取链接:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=qtyyc38p
优惠链接:(总有一款适合你)
1)【开年HI购季】爆款云产品5折:https://www.aliyun.com/acts/product-section-2019/new-users?userCode=qtyyc38p
2)【助力企业上云】性能级主机2-5折:https://promotion.aliyun.com/ntms/act/enterprise-discount.html?userCode=qtyyc38p
3)【全民云计算】云主机低至2折:https://promotion.aliyun.com/ntms/act/qwbk.html?userCode=qtyyc38p
4)【商标注册服务】低至300元:https://tm.aliyun.com/?userCode=qtyyc38p
5)【超高返现】购物车全产品返25%:https://promotion.aliyun.com/ntms/act/shoppingcart.html?userCode=qtyyc38p
6)【阿里云自营建站】买一年送一年:https://www.aliyun.com/jianzhan/?userCode=qtyyc38p

你可能感兴趣的:(CentOS7.4自定义安装MySQL)