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<q#tspKk

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<q#tspKk)登录后修改
(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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容