1.卸载原有的mysql或者maridb
# 查询
rpm -qa|grep mariadb
# 卸载 文件名为上述命令查询出来的文件
rpm -e --nodeps 文件名
2.下载mysql安装包,并上传到linux服务器
#解压安装包
tar xvJf mysql-8.0.29-linux-glibc2.12-x86_64.tar.xz
# 重命
mv mysql-8.0.29-linux-glibc2.12-x86_64 mysql
3.创建配置文件
# 在/etc下创建my.cnf文件,如果有则编辑
创建文件touch my.cnf
[mysqld]
# skip-grant-tables
port=3306
basedir=/usr/local/mysql
# 数据文件夹地址
datadir=/home/jeuso/work/mysql/data
socket=/tmp/mysql.sock
pid-file=/home/jeuso/work/mysql/data/mysql.pid
log-error=/home/jeuso/work/mysql/data/error.log
character_set_server=utf8mb4
user=root
max_connections=1500
symbolic-links=0
# 东八区时区,北京时区
default-time-zone = '+8:00'
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 导入包允许的大小设置
max_allowed_packet=1024M
# 忽略表名大小写;1表示忽略大小写,0表示解析大小写
lower_case_table_names=1
# innodb配置
innodb_buffer_pool_size=2G
# innodb缓冲池实例个数和大小
innodb_buffer_pool_instances=16
innodb_buffer_pool_chunk_size=256M
innodb_file_per_table=ON
# 顺序扫描的缓冲区大小
# record_buffer_size=16773120
# 随机读缓冲区大小
read_rnd_buffer_size=16773120
# 需要进行培训的线程缓冲区大小
sort_buffer_size=16777208
# 表高速缓存的大小
# table_cache=256M
# 可复用保存在缓存中的线程数量
thread_cache_size=80
# log缓存大小,较大的事务,可以增大缓存大小
innodb_log_buffer_size=32M
4.初始化mysql
# 进入mysql安装目录下bin目录
cd /usr/local/mysql/bin
# 执行初始化命令
./mysqld --initialize
# 在打印信息的最后面存在临时root用户密码。保存下来
NC5:oO-ke-ox
gHhrG+TJp7su
>p<ib7.d(o%J
5. 配置mysql服务
# 添加mysqld服务到系统 在mysql安装目录下执行
cp -a ./support-files/mysql.server /etc/init.d/mysql
# 授权以及添加服务
chmod +x /etc/init.d/mysql
chkconfig --add mysql
# 启动mysql
systemctl start mysql
# 将mysql命令添加到服务
ln -s /usr/local/mysql/bin/mysql /usr/bin
# 登录测试
mysql -uroot -p
# 如果提示mysql命令找不到,则在etc/profile文件中添加
export PATH=$PATH:/usr/local/mysql/bin
# 刷新配置文件
source /etc/profile
6.修改全局访问以及root用户登录密码
# 登录mysql 使用初始化时的临时密码登录
mysql -uroot -p
# 登录成功mysql 界面 修改数据库
mysql> use mysql;
# 修改远程访问
mysql> update user set host='%' where user='root';
# 刷新权限
mysql> flush privileges;
# 修改root密码
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';
mysql> flush privileges;
mysql> quit;
# PS注意端口放行
7.问题
7.1控制台没有打印临时密码
第一种方法:先在/var/log/mysqld.log中看,在文件最后面有写(或者mysql.log)
PS:在error.log文件中
grep "password" /var/log/mysqld.log
第二种方法:在/etc/my.cnf中添加跳过密码验证
[mysqld]
# 跳过密码验证
skip-grant-tables
port=3306
# 修改完成后重启mysql服务
systemctl restart mysql
# 直接登录,不需要密码
mysql -uroot
# 执行第5步修改密码, 此时需要按照顺序执行,如果直接alter可能会提示 此时是使用跳过权限登录的,所以不允许修改
# 修改完成后,还原my.cnf文件,重启mysql服务
7.2 libtinfo版本问题(error while loading shared libraries: libncurses.so.5: cannot open shared object file)
# 运行mysql时提示:mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
# 管理员权限执行 如果不成功 检查版本
1.查找
没有libncurses.so.5,可能有libncurses.so不同版本的文件,使用命令
find / -name 'libncurses*'
2. 建立软链接
ln -s libncurses.so.6.2 libncurses.so.5
ln -s /lib64/libtinfo.so.6 /lib64/libtinfo.so.5
7.3mysql8密码安全验证问题,使用Navicat连接不上
# 原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则改为caching_sha2_password
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '!Q2w3e4r5t6y';