1. 下载
- 下载地址:https://downloads.mysql.com/archives/community/
- 百度网盘链接: https://pan.baidu.com/s/1BkOuYlz2Ef7KRe9gikDUCg 密码: 0l15
2.卸载mariadb
1 | 查看mariadb 的安装包 |
3.安装
解压安装包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16进入下载目录
cd /usr/local/src/
解压, 如果是.tar则用 tar -zxvf解压, 我下载的是.tar.xz包,使用的是tar -xvJf
tar -xvJf mysql-8.0.28-linux-glibc2.17-x86_64-minimal.tar.xz
移动解压后的文件夹至/usr/local
mv /usr/local/src/mysql-8.0.28-linux-glibc2.17-x86_64-minimal /usr/local/
cd /usr/local/
重命名
mv ./mysql-8.0.28-linux-glibc2.17-x86_64-minimal mysql8
创建文件夹data,存储文件;
cd /usr/local/mysql8/
mkdir ./data创建用户以及用户组
1
2
3
4用户组
groupadd mysql
用户 (用户名/密码)
useradd -g mysql mysql授权
1
2
3
4chown -R mysql.mysql /usr/local/mysql8/
或
chown -R mysql .
chgrp -R mysql .初始化数据库
1
2
3
4
5
6
7
8
9
10查看当前所在目录
pwd # 若显示/usr/local/mysql-8.0,请继续执行,否则请先进入此目录/usr/local/mysql-8.0
初始化 注意查看是否存在相关目录,若不存在,请新建
亲测
./bin/mysqld --user=mysql --basedir=/usr/local/mysql8/ --datadir=/usr/local/mysql8/data/ --initialize
或
./bin/mysql --user=mysql --basedir=/usr/local/mysql8/ --datadir=/usr/local/mysql8/data/ --initialize ;
如果出现错误:./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
yum install -y libaio #安装后在初始化就OK了
注意:后面白色高亮选中的是初始密码!!!!配置my.cnf
1
vim /etc/my.cnf
在配置中键入如下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37[mysqld]
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql8
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql8/data
# 允许最大连接数
max_connections=1000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=100
# 服务端使用的字符集默认为UTF8
utf8mb4 =
# 创建新表时将使用的默认存储引擎
INNODB =
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
#是否对sql语句大小写敏感,1表示不敏感
#lower_case_table_names = 1
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#Metadata Lock最大时长(秒), 一般用于控制 alter操作的最大时长sine mysql5.6
#执行 DML操作时除了增加innodb事务锁外还增加Metadata Lock,其他alter(DDL)session将阻塞
lock_wait_timeout = 3600
#内部内存临时表的最大值。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 64M
max_heap_table_size = 64M
[mysql]
# 设置mysql客户端默认字符集
utf8mb4 =
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
utf8mb4 =建立Mysql服务
1
2
3
4cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
chkconfig --list mysql启动Mysql服务
1
2
3
4启动
service mysql start;
查看启动状态
service mysql status;如果提示: -bash: mysql: command not found
1
ln -s /usr/local/mysql8/bin/mysql /usr/bin
登录Mysql
1
2mysql -uroot -p
输入"初始化数据库"操作时的"临时密码"修改密码:
1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
远程连接
- 进入mysql命令行
1
2
3
4use mysql;
update user set host ='%' where user='root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
- 进入mysql命令行
检查端口
1
2
3
4
5
6
7
8检查3306端口是否开放
netstat -nlp|grep 3306
开放3306端口
firewall-cmd --permanent --add-port=3306/tcp
重启防火墙
firewall-cmd --reload
4. 常见问题
The server quit without updating PID file
- 第一,权限的问题,在出这个错误的时候,我所说的权限是mysq.cnf和所定义的mysql数据库存放目录的权限,要保证是mysql用户的权限,如果启动mysql还有问题,那么需要考虑提高权限了。
说人话, 数据库存放目录必须是mysql这个用户的属组(通常的,安装MySQL的时候建立的用户为mysql,不建议使用别的用户),mysql的启动脚本必须有执行权限。赋予权限的命令为:chown -R mysql. /usr/local/mysql,假设我的mysql是安装在 /usr/local/mysql目录,数据库存放目录为 /usr/local/mysql/data/ - 第二,进程中有mysql的进程,上次的退出并没有自动结束该pid,导致新的进程无法启动,毕竟,mysql每次启动系统只会给分配一个pid号,再启动,系统也不可能给你分配pid号了。运行命令 ps -ef |grep mysql 找到mysql的进程结束它,然后在启动mysql。
- 第三,进入mysql数据库的存放目录,如果有mysql-bin.index这样的文件,删除它,在启动mysql,该文件产生的原因不详,不过删除必定没影响,或者另一个binlog.index也删除,两个index后缀的都删除也可以。
- 第四,my.cnf 这个配置文件内容不对,检查有没有skip-federated这个字段,如果有注释或者删除。
检查是否定义了数据库存放目录,如果没有定义,请立刻定义。 - 第五,错误日志目录不存在解决方法:使用“chown” “chmod”命令赋予mysql目录所有者及权限。
- 第六,my.cnf文件内存在lower_case_table_names=1 字段,注释掉它。(这个选项是1表示不区分大小写)。具体原因不详。
总结:mysql说好安装也好安装,说难也难,难点在于权限的配置,给高了不安全,给低了有可能启动出问题,如果启动出问题了,首先第一件事就是检查目录权限,第二就是检查my.cnf这个配置文件,skip-federated,lower_case_table_names=1 ,这样的字段注释掉,第三,清除旧的mysql进程,如果有就清除掉,旧的不去新的不来,就这么一个道理。第四,进入mysql数据库存放目录删除index后缀的文件。下面,给张图,详细的权限慢慢体会
1
ls -al /etc/init.d/mysql
- 第一,权限的问题,在出这个错误的时候,我所说的权限是mysq.cnf和所定义的mysql数据库存放目录的权限,要保证是mysql用户的权限,如果启动mysql还有问题,那么需要考虑提高权限了。
Can ‘t connect to local MySQL server through socket ‘/tmp/mysql.sock
1
2
3连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务删除了/tmp下的临时文件。
如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。因为服务器在启动时重新创建它。
如果和我一样,重启服务器还是没有任何变化,你可以先执行下面的语句1
mysql -uroot -h 127.0.0.1 -p
解决方式:
1
2sudo mkdir /var/run/mysqld/
sudo ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sockhowever file don’t exists. Create writable for user ‘mysql’
问题描述:1
2[root@test2 my57_3307]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/dbdata/mysql/my57_3307/my57_3307.cnf --ledir=/usr/local/mysql57/bin
2018-08-26T14:12:45.459798Z mysqld_safe error: log-error set to '/var/log/mysqld/my57_3307.log', however file don't exists. Create writable for user 'mysql'.解决方式:
1
2
3touch /usr/local/mysql8/log/error.log
chown mysql /usr/local/mysql8/log/error.log
/usr/local/mysql8/bin/mysqld_safe --defaults-file=/etc/my.cnf --ledir=/usr/local/mysql8/bincannot open shared object file: No such file or directory
1
2
3
4需要安装 libnuma
yum install libnuma
yum -y install numactl
yum install libaio1 libaio-devmysqld启动报错Failed to find valid data directory
1
2
3
4
5
6
7
8
9vim /etc/my.cnf #查看datadir配置项的路径,然后一般是/var/lib/mysql,将这个文件夹删掉,然后重新初始化
/usr/local/mysql8/bin/mysqld --initialize --user=mysql
如果mysqld启动服务时提示不能用root启动,则在/var/lib/mysql中加入这行 user=mysql
重启
service mysql restartNavicat无法连接:Host is not allowed to connect to this MySQL server
1
2mysql -uroot -p
输入密码操作数据库
1
2use mysql;
select host from user where user='root';该结果表示当前的root用户限制在当前的IP内访问,需要修改他的访问域
1
2update user set host='%' where user='root';
flush privileges ;Can’t connect to MySQL server ‘xxxxxx’ on(60)
我买的是阿里云服务器,前往阿里云服务器配置安全组规则即可