一、安装源码安装MySQL80

1.初始化配置

需要创建用户和建立数据目录,然后创建mysql的安装路径以及数据存放的路径,这里可以分开存也可在一条路径上。然后给这个文件设置文件归属者,以及设置mysql用户组中的mysql用户访问和读写权限的一些权利。

#要先删除用户才能删除用户组
sudo userdel mysql #删除mysql用户
sudo groupdel mysql #删除mysql用户组
sudo groupadd mysql
sudo useradd -r -g mysql -s /sbin/nologin mysql
mkdir -p /usr/local/mysql/data 
sudo chown -R mysql.mysql /usr/local/mysql/*
sudo chmod -R 755 /usr/local/mysql
2.下载源码软件+编译安装

这里选择的是mysql-boost-8.0.16.tar.gz,也可以选择.tar.gz结尾的其他版本的mysql源码软件。可以直接使用链接下载,选择带有boost的,不然就要在系统上提前单独安装这个软件。下载之后解压软件。然后进入解压目录,然后即可编译安装,其中/usr/local/mysql是我的安装目录

cd [下载软件的文件夹]
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.16.tar.gz
tar -zxvf mysql-boost-8.0.16.tar.gz
cd mysql-8.0.16

#编译安装
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_BOOST=boost -DFORCE_INSOURCE_BUILD=ON
make && make install
#初始化安装
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

PS:初始化安装中可能会出现一串mysql登陆的密码,可以记下来。不记也没关系。

先看一下在/ettc文件夹下有没有my.cnf,如果没有就新建一个全局用的简单的配置文件。参考问题记录一。

配置好全局文件之后,就可以开启mysql服务了

#配置mysqld服务#
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
update-rc.d mysqld defaults
service mysqld start
#添加路径#
echo -e '# MySQL PATH\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile
source /etc/profile
3.登陆mysql

切换到mysql用户组下,如果你的mysql组密码忘记了,可以先删除它的密码,然后创建密码,在进行登陆。登陆后进行的一些命令可能会出现问题二,问题三。

sudo passwd -d mysql
sudo -u mysql passwd
###设置密码,然后在进行登陆
su - mysql
#在root用户下登陆
mysql -uroot -p

二、问题记录

问题一:MySQL没有my.cnf配置文件如何解决

解决方案:新建一个/etc/my.cnf

vim /etc/my.cnf
# 然后写入以下内容 #
[client]
socket = /tmp/mysql.sock
 
[mysqld]
#skip-grant-tables  
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
#pid
pid-file = /usr/local/mysql/mysql.pid
#设置socke文件所在目录
socket = /tmp/mysql.sock
#设置临时目录
tmpdir = /tmp
#允许访问的IP网段,加上这个可以远程访问
bind-address = 0.0.0.0
问题二:安装好之后首次登陆出现的问题。ERROR 1045 (28000): Access denied for user ‘ODBC‘@‘localhost‘ (using password: NO/YES)

解决方案:
1.将/etc/my.cnf文件中的skip-grant-tables这个参数的注释除掉。

sudo vim /etc/my.cnf

2.停止mysql数据库,(或者直接 kill -9 [PID] 杀进程!)

/etc/init.d/mysqld stop

3.执行如下命令

mysqld_safe --user=mysql --skip-grant-tables --skip-networking &

4.然后就可以在root用户下免密登陆了,修改密码

//先执行
flush privileges;
//修改密码
UPDATE user SET authentication_string=PASSWORD('newpassword') where USER='root';
//刷新权限
FLUSH PRIVILEGES;
//退出
quit

5.再把/etc/my.cnf文件中的skip-grant-tables这个参数的注释起来,然后重启

/etc/init.d/mysqld restart
#重新登陆
mysql -uroot -p

(在重启过程中可能会遇到问题四)

问题三:.mysql 不在 sudoers 文件中。此事将被报告。

解决方案:
1.根据错误提示,只需将当前登录用户mysql,加入到sudoers文件中即可。

#回到root用户
su - root
#给root用户添加可写权限
chmod 640 /etc/sudoers
#修改sudoers文件
vim /etc/sudoers
#添加如下内容,按下esc键,输入:wq保存修改并退出编辑。
mysql    ALL=(ALL)    ALL

2.修改sudoers文件:只读权限(原有权限)

#为了安全考虑
chmod 440 /etc/sudoers
问题四:如果执行sudo service mysql status.mysql会出现service: Failed with result ‘exit-code‘。(mysql.service 的作业失败,因为控制过程以错误代码退出)

解决方案:

#查看具体问题的命令,看服务有无启动
sudo systemctl status mysql.service
#解决方案
ps -e | grep mysqld
#根据输出的内容,去杀死mysqld进程
sudo kill -9 63525 #63525具体根据你的编码去改
#重新启动服务
service mysql start
PS(补充):允许远程登陆
//进入mysql库
use mysql
//更新域属性,'%'表示允许任意IP地址访问
update user set host='%' where user ='root';
//执行以上语句之后再执行
FLUSH PRIVILEGES;
//再执行授权语句
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;