准备工作:CentOS-7,配置好yum源,具体可见我的博客https://blog.csdn.net/kehana/article/details/90932592,最好再挂载好一块空的磁盘,详情见 https://blog.csdn.net/kehana/article/details/113363493
1:查看系统有没有安装过mysql,有的话删掉,步骤如下
#查看是否安装过:rpm -qa|grep mysql
#删除已安装的版本:rpm -e --nodeps XXXXXXXXX (XXX表示上一条命令查出来的结果)
#再次查询是否删除干净:rpm -qa|grep mysql
#查询所有旧版本mysql对应的目录:find / -name mysql 和 whereis mysql 将查出来的目录rm -rf 删除
#再次查询是否删除完毕 :find / -name mysql 和 whereis mysql
2:检查系统中是否有mysql用户,没有则创建,如下:
#创建mysql组:groupadd mysql
#创建mysql用户:useradd -d /home/mysql -g mysql -G mysql mysql -d 表示mysql用户的家目录 -g表示主组 -G表示附属组,具体linux命令可以看我另一篇博客 https://blog.csdn.net/kehana/article/details/90765448 平时能用到的命令在里面都有
3:下载mysql安装包并进行配置安装
mysql官网地址 可以进行选择下载,我这里下载的是 mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 因为我已经挂载了一个/mysql分区,所以以下mysql的安装文件以及各种目录都在/mysql下面,正规默认的应该是在/usr/local/mysql下面
#解压重命名 tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /mysql mv /mysql/mysql-5.7.24-linux-glibc2.12-x86_64 /mysql/mysql-5.7.24
#在mysql下面创建data目录 mkdir /mysql/mysql-5.7.24/data
#更改/mysql下目录及文件的所属组及权限 chown -R mysql:mysql /mysql chmod -R 755 /mysql
#编译并初始化mysql,牢记初始化结束最后一行末尾冒号后的那个密码字符串
cd /mysql/mysql-5.7.24/bin ./mysqld --initialize --user=mysql --datadir=/mysql/mysql-5.7.24/data --basedir=/mysql/mysql-5.7.24 --datadir就是上面创建的data路径,--basedir表示mysql的安装路径
如果编译初始化过程中报错缺少libaio.so,执行yum -y install libaio*
如果报错缺少libnuma , 执行 yum -y install numactl
#编译初始化完毕之后修改/etc/my.cnf配置文件,添加或者修改一下内容:
[mysqld]
datadir=/mysql/mysql-5.7.24/data
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
socket=/mysql/mysql-5.7.24/lib/mysql/mysql.sock
symbolic-links=0
#最大连接数
max_connections=600
#将每张表单独存储
innodb_file_per_table=1
#不区分大小写
lower_case_table_names=1
#字符集
character_set_server=utf8
[mysqld_safe]
log-error=/mysql/mysql-5.7.24/log/mariadb/mariadb.log
pid-file=/mysql/mysql-5.7.24/run/mariadb/mariadb.pid
保存退出,可以看到我将里面的/usr/local/mysql 全部换成了 /mysql/mysql-5.7.24
在此处我们做几个软连接,如下:
ln -s /mysql/mysql-5.7.24/lib/mysql/mysql.sock /tmp/mysql.sock
ln -s /mysql/mysql-5.7.24/support-files/mysql.server /etc/init.d/mysql
ln -s /mysql/mysql-5.7.24/bin/mysql /usr/bin/mysql
#启动Mysql
service mysql start
#进入Mysql数据库
mysql -uroot -p(刚刚初始化最后的那个密码,如果忘记了root密码,看接下来的部分
忘记了Mysql的root用户密码
1:修改/etc/my.cnf 在 [mysqld] 下面加入 skip-grant-tables 然后重启数据库 service mysql restart
2:直接输入mysql可进入mysql命令行 show databases; use mysql; desc user; 可以看到user表中有个 authentication_string 字段,复制一下
3:update user set authentication_string=password('abcd1234') where user='root' and host='localhost'; flush privileges;
4:exit; 退出数据库,将刚刚在/etc/my.cnf添加的那个skip-grant-tables注释掉,重启数据库
5:mysql -uroot -pabcd12324进入数据库 进入数据库之后可能还会要求你再继续改一次密码,执行 set password=password('1qaz@2wsx'); 数据库就可以完美使用了,否则你是执行不了命令的
说明:有其他帖子里面的步骤和我第三步不一致,这个可能是数据库版本的原因吧,他们的步骤是:update user set password=password('abcd1234') where user='root';
我看了下我的user表中没有password字段,所有就不能set password。你们可以根据自己的数据库来整,具体是上面的第二步中的进到mysql库中,desc user表,看看里面有没有password字段
#创建数据库用户并授权,并用IP登录数据库
#mysql数据库新建一个库,新建一个数据库用户,并授权
root用户进入数据库之后创建一个TESTDB库 create database TESTDB;
#创建用户及授权一步搞定:grant all privileges on TESTDB.* to cainiaoke@'%' identified by '1qaz@2wsx'; cainiaoke@*%* 百分号表示用IP或者localhost都行。具体可查看mysql库user这张表的host字段下的数据
#如果想要在系统外部的工具链接数据库,比如使用navicat连接数据库,需要在系统防火墙开放3306端口,操作如下:
1:查看当前系统数据库是否开启:ffirewall-cmd --state 如果没开启请执行:systemctl start firewalld
2:防火墙中添加3306端口开放:firewall-cmd --permanent --zone=public --add-port=3306/tcp 重新加载防火墙:firewall-cmd --reload
此时本地的工具就可以链接mysql数据库了
#删除数据库用户:delete from mysql.user where user='cainiaoke'; flush privileges;刷新数据库授权
查看mysql数据库当前所有连接(包括IP等信息)
show processlist;
mysql> show processlist;
+---------+------+--------------------+-------------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+---------+------+--------------------+-------------+---------+------+----------+------------------+
| 1380797 | dev | 192.x.xxx.x50:60041 | NULL | Sleep | 628 | | NULL |
| 1380799 | dev | 192.x.xxx.x50:42251 | dev | Sleep | 625 | | NULL |
| 1380803 | dev | 192.x.xxx.x50:32889 | NULL | Sleep | 5 | | NULL |
| 1380952 | dev | 192.x.xxx.x50:34658 | dev | Query | 0 | starting | show processlist |
+---------+------+--------------------+-------------+---------+------+----------+------------------+
杀掉连接
kill ID;
杀掉所有连接
select concat('kill ',id.';') from information_schema.processlist where user='hjgl';
杀掉长连接sleep进程
SELECT ID FROM information_schema.PROCESSLIST t WHERE t.COMMAND='Sleep' and user=hjgl and time >1000;