源码安装mysql-5.7.13一周的冤枉路总结。满满的都是泪啊

MySQL从5.5以后都是用cmake来进行安装。

5.7.5开始安装环境需要boost库的支持

下载安装包:

https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.13.tar.gz

https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

tar解压安装包。

需要的编译环境:make gcc gcc-c++ ncurses-devel openssl openssl-devel bison*

ps:编译环境一定要装全,被坑了两星期悟出的血的教训。

正式安装前一定查看有没有安装MySQL的rpm包。如果有的话先卸载。有的系统会自带有mariadb建议同样卸载。

编译:

cmake . -DCMAKE_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/data/mydata \

-DSYSCONFDIR=/etc \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_ARCHIVE_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DWITH_LIBWRAP=0 \

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \

-DWITH_SSL=system \

-DWITH_ZLIB=system \

-DWITH_BOOST=/document/tar/boost_1_59_0 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci

ps:感觉参数比较多在命令行里不好写,可以写成脚本。出现问题,把问题粘到百度上找吧。基本上都是编译环境的问题。缺什么包直接装什么包就行了。

只要以上没问题,就可以按照make ; make install 的套路走了。这一步比较慢,视机器性能而定。

如果编译出现问题需要重新编译记得

make clean        #清除编译缓存
rm CMakeCache.txt   #删除生成的文件

安装完成。

创建mysql用户

useradd mysql

将MySQL的安装目录更改属主和属组为mysql。

chown -R mysql:mysql  /usr/local/mysql

在mysql目录下创建mysql-files目录

mkdir mysql-files

ps:默认时没有这个目录的。见别人创建我也创建了。也不知道是干啥用的。

然后是初始化目录

./bin/mysqld --initialize --user=mysql

第一次初始化的时候在最后会有一串类似乱码的东西。那是个临时密码。(然而并没有什么卵用。因为你可能压根就启动不起来)

ps:初始化默认只能进行一次。如果继续初始化的话。需要把配置文件my.cnf中的数据目录清空。同样,如果要更改数据存放目录。也要重新进行初始化。

 

配置文件解析:

[mysqld]

datadir=/data/mydata   #数据目录

socket=/var/lib/mysql/mysql.sock    

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

skip-grant-tables   #这个是默认没有的,跳过密码登陆。

# 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

 

[mysqld_safe]

log-error=/var/log/mysql/error.log         #错误日志文件

pid-file=/var/run/mysql/mysql.pid           #进程PID

 

#

# include all files from the config directory

#

!includedir /etc/my.cnf.d

 

启动mysql

./support-files/mysql.server start

ps:如果能启动起来,只能说你运气逆天

如果启动不起来,查看my.cnf

如果是:

[mysqld_safe]

log-error=/var/log/mariadb/error.log        

pid-file=/var/run/mariadb/mariadb.pid         

将mariadb更改为mysql。再查看有没有这两个路径,如果没有就创建这两个目录。只创建目录,不创建文件。

注意属组和属主要是mysql。

然后重新启动。

如果临时密码忘了或者是临时密码登陆不进去。更改密码:./bin/mysqladmin -u root password "root"    #注意路径问题。

如果登陆或更改密码时报错:

[root@localhost mysql]# ./bin/mysql -uroot -p

Enter password:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

ps:被这问题缠绕了一天。解决办法就是用find在根目录下查找mysql.sock文件。然后做个软链接到报错的路径。

[root@localhost mysql]# find / -name mysql.sock

find: ‘/run/user/1001/gvfs’: 权限不够

/var/lib/mysql/mysql.sock

[root@localhost mysql]# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

根据个人找到的路径不同做更改,具体原理参照下面链接。非常详细。

https://www.cnblogs.com/Lam7/p/6090975.html    ps:感谢

然后重新启动服务。可以先用跳过密码登陆。

my.cnf配置文件中加:skip-grant-tables

登陆后更改密码:

update mysql.user set authentication_string=password("root") where user;

如果用随机密码登陆需要先更改密码:set password=password('new password')要不然无论什么操作都会提醒You must reset your password using ALTER USER statement before executing this statement.

 

ps:整个过程找问题找资料找了一周,希望这篇文章能让你少走点冤路。

附:

创建远程用户:
grant all privileges on *.* to admin@"%" identified by "password";
all privileges 表示所有权限
*.* 表示所有库下所有表
admin 用户名
% 所有主机地址
identified by 关键字,后跟密码
password 密码

 

posted @ 2018-04-28 19:43  翎戍  阅读(152)  评论(0编辑  收藏  举报