官方网址:MySQLhttps://www.mysql.com/MySQL :: MySQL Community Downloads
我们选择:Compressed TAR Archive 版本的,不要RPM版的
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.27-el7-x86_64.tar.gz
# cd /mydata
# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
# 如果传输过程中终端了,然后再次使用 -c 参数,可以接着下载:
# wget -c https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
1、 卸载系统自带的mariadb*
# rpm -qa|grep mariadb
mariadb-libs-5.5.60-1.el7_5.x86_64
# rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64 删除此
或者使用yum命令删除
# yum -y remove mariadb* boost-*
2、检查mysq用户、用户组是否存在,不存在就创建
# cat /etc/group | grep mysql
# cat /etc/passwd | grep mysql
# useradd -M -s /sbin/nologin mysql //创建名为mysq的用户并且没有登录权限 (不指定 -g默认创建了同名mysql的用户组)
3、删除my.cnf mysql (若存在)
# rm -f /etc/my.cnf
# rm -f /etc/init.d/my.cnf
# rpm -qa | grep mysql
注意此文件为.tar.xz 类型的文件
# cd /mydata
解压:(分两步)
首先加xz格式的文件
# xz -dev mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
再次解压tar格式,解压到/usr/local/
# tar -xvf mysql-8.0.26-linux-glibc2.12-x86_64.tar -C /usr/local/
# cd /usr/local/
# mv mysql-8.0.26-linux-glibc2.12-x86_64 mysql8 //# 重命名
创建如下目录:
# mkdir /usr/local/mysql8/data (数据库目录)
# mkdir /usr/local/mysql8/log (日志目录)
# touch /usr/local/mysql8/log/mysqld.log (创建日志文档)
//改变mysql的属组
# chown -R mysql:mysql /usr/local/mysql8/
或者下面两句
# chown -R mysql /usr/local/mysql8/
# chgrp -R mysql /usr/local/mysql8/
查询是否安装libaio依赖包
# yum search libaio
#如果没有,就安装
# yum -y install libaio
# /usr/local/mysql8/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql8/ --datadir=/usr/local/mysql8/data/
此版本采用mysql_install_db 进行安装,不再使用cmake 编译安装
# /usr/local/mysql/bin/mysql_install_db //安装命令
--initialize //生成默认密码
--user=mysql //指定mysql用户
--basedir=/usr/local/mysql8/ //安装目录
--datadir=/usr/local/mysql8/data/ // 数据库目录
最后出现如下:
2021-11-17T09:40:42.245865Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1 is enabled for channel mysql_main
2021-11-17T09:40:42.246411Z 0 [Warning] [MY-013746] [Server] A deprecated TLS version TLSv1.1 is enabled for channel mysql_main
2021-11-17T09:40:42.367142Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: I60oX,Ml8Dye
OK 安装成功
注意最后的 I60oX,Ml8Dye 表示默认密码,下面初始化数据库要用到
查看数据库目录 /usr/local/mysql8/data/ 多了很多内容
# 启动MySQL命令
# /usr/local/mysql8/support-files/mysql.server start
# 因为没有因为没有修改mysql的配置文件 配置, 报错如下:
/usr/local/mysql8/support-files/mysql.server: line 239: my_print_defaults: command not found
/usr/local/mysql8/support-files/mysql.server: line 259: cd: /usr/local/mysql: No such file or directory
Starting MySQLCouldn't find MySQL server (/usr/local/mysql/[FAILED]ld_safe)
修改配置
# vim /usr/local/mysql8/support-files/mysql.server
大约46行:
# basedir=/usr/local/mysql8
# datadir=/usr/local/mysql8/data
大约63行:
# mysqld_pid_file_path=/usr/local/mysql8/data/mysqld_pid
# 以及66--73行,相关的路径改成 /usr/local/mysql8
#复制到 /etc/init.d/目录
# cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld
#赋予权限
# chmod 755 /etc/init.d/mysqld
再次启动:
# /usr/local/mysql8/support-files/mysql.server start
出现如下:
Starting MySQL.Logging to '/usr/local/mysql8/data/error.log'.
. [ OK ]
OK 启动成功
# netstat -tlnp | grep mysqld 查看端口号 这是3306、33060的都已经去启动了,说明MySQL服务器已经开启了
方法一:(推荐)
# chkconfig --add mysqld //将mysql服务加到系统服务中,可以是使用 systemctl status mysqld.service 命令了
# chkconfig mysqld on //开机自启动
方法二:
[root@VMTest mysql]# chkconfig --level 35 mysqld on
[root@VMTest mysql]# chkconfig --list mysqld
[root@VMTest mysql]# chkconfig --add mysqld
[root@VMTest mysql]# chkconfig --list mysqld
[root@VMTest mysql]# service mysqld status
现在我们使用 # mysql -uroot -p 登录MySQL 报错如下:-bash: mysql: command not found 。是因为还没有 msyql 这个环境变量,设置如下:
# vim /etc/profile
把如下代码添加到 此文件的最后:
export PATH="$PATH:/usr/local/mysql8/bin"
//立即生效
# source /etc/profile
# echo $PATH
再次:# mysql -uroot -p OK 可以登录了。
注:
CentOS8.5 版本 这里执行“# mysql -uroot -p” 报错了:(CentOS8.4以及之前的不报此错误)
[root@qinser ~]# mysql -uroot -p
mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
查看依赖:
# cd /usr/local/mysql8/bin/
# ldd mysql #查看依赖库文件
下面列出了各个依赖库
发现:
libtinfo.so.5 => not found #显示缺少该库文件
进入到 /usr/lib64/ 查看发现此目录有 libtinfo.so.6 ,却没有libtinfo.so.5的 我们创建一个软连接 ,
# cd /usr/lib64/
//创建一个名为libtinfo.so.5的软件接,指向此目录的libtinfo.so.6.1文件
# sudo ln -s libtinfo.so.6.1 libtinfo.so.5
OK 再次执行
# mysql --version
或者
# mysql -uroot -p
OK 可以了
这里下载的mysql8.0.26版本并没有这个my.cnf文件,因此直接创建的。
# vim /etc/my.cnf
# ======================== 粘贴内容 start ========================
[client]
port=3306
socket=/tmp/mysql.sock
#default-character-set=utf8
[mysqld]
basedir=/usr/local/mysql8
datadir=/usr/local/mysql8/data
socket=/tmp/mysql.sock
user=mysql
port=3306
# 服务端使用的字符集默认为8比特编码的latin1字符集
character_set_server=utf8
# 创建新表时将使用的默认存储引擎
# default-storage-engine=INNODB
# symbolic-links=0
# bind-address=0.0.0.0
# 允许最大连接数
max_connections=200
# max_allowed_packet=16M
[mysqld_safe]
log-error=/usr/local/mysql8/data/error.log
pid-file=/usr/local/mysql8/data/mysqld.pid
tmpdir=/tmp
# ======================== 粘贴内容 end ========================
//设置此文件可执行权限
# chmod 755 /etc/my.cnf
先使用初始密码登录
# mysql -uroot -p
# alter user 'root'@'localhost' identified by '新密码'; -- 注意要含有大小写字母、数字、特殊符号等
Query OK, 0 rows affected (0.01 sec)
#刷新
# flush privileges;
Query OK, 0 rows affected (0.00 sec) OK 新密码设置成功
mysql> use mysql;
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | caching_sha2_password |
+-----------+------------------+-----------------------+
4 rows in set (0.01 sec)
可以看出,mysql8.0以后的加密方式是caching_sha2_password, 而我们的客户端工具使用的多大是mysql_native_password加密,因此首先需要对root的密码进行加密置换。
修改:
1、更换加密规则,重新设置密码
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'Niu@254507';
Query OK, 0 rows affected (0.01 sec)
2、更新root的host为%,% 表示通配所有 host,可以访问远程
mysql> update user set host='%' where user='root';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
3、授权
mysql> grant all privileges on *.* to 'root'@'%' with grant option;
mysql> flush privileges;
Query OK, 0 rows affected, 1 warning (0.00 sec);
4、查看加密函数是否更改
mysql> select host, user, authentication_string, plugin from user;
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| % | root | *94E5BCBFDBBAA71F5E15B717324F45A9966C83B3 | mysql_native_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
4 rows in set (0.00 sec)
重启mysql服务器 (还要检测服务器是否开发了mysql3306端口,如果没开放,请去控制台放开)
附:常用命令
#
# /etc/init.d/mysqld
Usage: mysqld {start|stop|restart|reload|force-reload|status} [ MySQL server options ]
# /etc/init.d/mysqld start //开启
# /etc/init.d/mysqld stop //停止
# /etc/init.d/mysqld restart //重启(强制重启)
# /etc/init.d/mysqld reload //平滑重启(在开启的状态下)
# /etc/init.d/mysqld status //查看状态
加入环境变量以后可以使用
# service mysqld {start|stop|restart|reload|force-reload|status}
或者
# systemctl {start|stop|restart|reload|force-reload|status} mysqld.service
# netstat -tlnp //查看所有端口号
# ps aux | grep mysqld //查看进程
# kill 9203 //通过杀死进程结束mysql
MySQL基本操作常用命令
# 本地连接数据库
# mysql -u root -p
Enter password:
也可以直接写成
# mysql -uroot -p'niu123456'
# 远程连接数据库(如在118.24.241.124上连接106.12.2.195上的)
# mysql -u root -p -h106.12.2.195 -P3306 //-h用于指定登录主机的IP地址,-P(大写)用于指定远程主机的端口
Enter password:
mysql> show databases; //显示所有数据库
mysql> use mysql; //选择mysql数据库
mysql> show tables; //显示当前mysql数据库中的所有数据表
mysql> desc user; //显示user表的所有字段
mysql> show create table user\G; //显示user表的建表语句
mysql> show create database mysql\G; //显示mysql数据库的建库语句
mysql> select version(); //查看当前数据库的版本
mysql> select user(); //查看当前是哪个用户
mysql> select database(); //查看当前是哪个数据库
mysql> show status; //查看mysql当前状态
mysql> show variables; //查看mysql的参数
mysql> show variables like '%dir';
mysql> show processlist; //查看当前mysql服务器的队列
mysql> grant all on *.* to niuxitong identified by 'niu123456'; //创建一个普通用户niuxitong *.* 前一个*表示所有数据库 ,后一个*表示所有表 密码用单引号括起来
mysqldump -u root -p 'niu123456' mysql > /mydata/databack/mysql-001.sql; //为名为mysql的数据库做备份。导出sql文件保存到/mydata/databack/mysql-001.sql文件中
mysql -u root -p 'niu123456' mysql < /mydata/databack/mysql-001.sql; 还原数据库