MySQL官网 https://www.mysql.com/
社区版 是免费的
Generic 一般版,普通版
点 Archives 其他版本,进入可以选版本号,点download ,复制下载链接
安装wget工具
wget下载
(当然win上下完了传上来也是一样的)
删除系统原有自带的mysql(如果有的话)。
grep -i 忽略大小写。
rpm -ev 对查出来的包进行强制删除
find查之前的mysql目录,并使用rm -rf 把这个文件夹名删除
删除my.cnf ,以前安装的配置文件
rm -rf /etc/my.cnf
解压安装
改名并迁移位置
建立目录,用于放置数据库的数据。
查看mysql用户和组是否存在,没有则创建
/etc/group 中查看组
groupadd 创建一个组
useradd -M -s /sbin/nologin mysql 创建一个无登入目录,登入后使用指定shell的MySQL用户。
useradd -g mysql mysql 把一个新建用户加到一个组里(跟在-g后是组名)。
指定shell是/sbin/nologin表示是无登录的用户,账号只是用于服务,对系统安全。
useradd -M -s /sbin/nologin -g mysql mysql
useradd 创建一个用户
-M 不自动创建/home/mysql这个家目录,这是用户登入目录。
(在/etc/passwd看,虽然会显示,但是是红色,非真实存在,见下图)
-r 建立系统帐号.
-g 群组名 指定用户所属的群组。
-s 登录后使用的shell名 指定用户登入后所使用的shell 。
设为/sbin/nologin 是无法登录系统的
设为/bin/bash 是可以登录系统的。(默认设置)
/etc/passwd 中查看用户
chown指定mysql数据目录的拥有者。即设定属主,属组。
chown -R mysql:mysql /data/mysql
-R 表示处理指定目录以及其子目录下的所有文件
ls -la 查看隐藏文件, /data/mysql 文件夹的属主属组。 . 是本文件夹 .. 是上一级文件夹
解压目录下几个重要文件的作用
XXX /bin/mysqld --initialize 是安装用的
XXX /support-files/mysql.server start 启动服务用的脚本
XXX/bin/mysql -uroot 进入mysql的可执行文件
$basedir/support-files/mysql.server 把mysql服务启动一下。
启动显示log没设置,是因为没有写权限。
还有个错误是PID没有找到,PID在没有启动之前确实是不存在的。
给.log文件一个mysql 用户权限。然后touch手动创建一个.log文件。
创建mysql.log后重启服务不再报错了,但PID的错误还存在。
PID是mysql启动后会自动创建的,目前还没有只是因为还没有启动成功。
为啥一直没启动成功呢?
看启动服务的mysql.server的内容可知,start启动的时候,实际启动的是/usr/local/mysql/bin/mysqld_safe
由于我们前面设定的是mysql用户组启动,而我们这里是用root来操作的,所以这里要加上
--user=root 不然会导致启动报错。
修改完成以后,再次start,成功启动。
ps -ef 验证一下,已经有mysql的PID了。
但 netstat -lntp 发现tcp的3306端口还没开始监听。这说明通信现在还存在问题。
去$basedir/bin/mysql 下先登陆一下试试:
安装时候最末尾A temporary password......有提示默认的root@localhost 用户的密码。
root@localhost 表示是本地的root用户。
(安装时信息截图)
./mysql -uroot 登录一下,发现socket通信文件没找到,这就是TCP3306还没被监听的原因。
虽然socket文件已经在定义的路径 /usr/local/mysql/mysql.sock 下自动生成了,但不知道为何还会去/tmp/mysql.sock这个路径找。(后面知道原因了我再来补充)(已找到原因)
当前处理方式把生成的 mysql.sock 和需要的 /tmp/mysql.sock 做软连接。
(养成好习惯,软链接一定要写绝对路径)
这里socket 还会报错原因是:单独只设定了服务端的socket
客户端和服务端的 socket 文件必须一致,但因为经常不写客户端配置(也就是【mysql】),而客户端socket默认是 /tmp/mysql.sock ,就会导致当服务端配置了其他的路径时候会发生上面报错。
把/etc/my.cnf 文件中加上客户端的配置如下。可写成【mysql】或【client】,只要2个端的socket对应一致就没问题了。
在$basedir/bin/mysql 再试试登录
(注意当初始默认密码中有 ;时直接 -p+密码明文 的写法会报错,系统会认为到分号时命令已结束。这种情况只能通过密文的方式输入密码。)
登陆成功。
刚登录进去的时候,数据库就会提示你必须用 alter user 来改密码才能去执行其他命令。
直接alter user root 会失败,这个是给当前用户以外的用户设定。
alter user user() 才能改当前用户的密码。
修改账号密码格式(mysql5.7以上版本)
alter user 用户名 identified by '新密码';
exit退出后,用新密码进入一次,成功。
加入启动服务列表:
mysql.server 实际是一个启动脚本
linux CentOS6 以来有一个chkconfig的系统服务管理命令,chkconfig --list列出所有的系统服务。
但是在Centos7 以后不能列出全部了,会提示使用 systemctl list-unit-files ,查看具体的服务用systemctl list-dependencies XXX
systemctl list-unit-files CentOS7 版本的列出所有服务
chkconfig --add mysqld 来把服务加入服务列表
要先把文件放入/etc/init.d/ 下才能加入到服务列表,并且文件要有755权限
(原先chkconfig --list存在的2个也在里面)
启动级别
关闭服务 chkconfig mysqld off ,关闭后不会自动随系统开机启动
启动服务 chkconfig mysqld on ,开启后,开机会自动启动
这里先关掉,则chkconfig --list 查看可见2,3,4,5 变成了off
手动启动
/etc/init.d/mysqld start
只要加入到服务列表的还可以直接用service来启动。
service mysqld start
虽然服务已经启动,但是直接用mysql命令还是无法进入数据库客户端。
这其实是因为mysql命令缺少系统环境变量路径。
平时直接输入的命令都会先去系统环境变量下搜索。
刚才可以进入客户端是用了/usr/local/mysql/bin/mysql 这个绝对路径,而只有在系统环境变量路径下的命令可以不用输入绝对路径。
所谓系统环境变量路径可以从$PATH查看,
软链接到任意一个系统环境变量下
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
现在直接用mysql可以成功登录了。
还有一种方法,直接把mysql的路径加入到系统环境变量中
PATH=$PATH:/usr/local/mysql/bin (临时生效,用户退出后失效)
尽管删掉之前做的mysql软链接,依然可以直接mysql命令登录。
但上面直接加的方式只是临时生效。
要永久生效要追加这个PATH命令到 /etc/profile
要加个 export , echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
export作用是做一个声明,不管是当前的shell还是子shell都生效。
source /etc/profile 可以立即让/etc/profile文件生效。