之前一直没怎么在centOS7安装过mysql,网上找了一些用rpm等方式安装的攻略,最后都失败,失败原因不一,最后找到一篇简书的文章,实测管用,但是有部分步骤依然没说明白,自己实操了下把步骤记录下来:
文章内容主要来源:Centos7安装mysql8 - 简书
下载安装包
MySQL :: Download MySQL Community Server
这样选.
下载这个版本:
接下来将下载的文件放到linux服务器上:
解压文件并放到目标目录下
xz -d mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz
接着执行命令,将压缩包解压到/usr/local下,或者其他你想要放置的目录下,注意如果这里放置的目录和我的不一致,则后续所有操作涉及mysql目录的路径也要跟着改变:
tar xvf mysql-8.0.28-linux-glibc2.12-x86_64.tar -C /usr/local/
注意不用能zxvf,会报错,要用xvf.
做软链接
解压后进入/usr/local/就能看到解压的mysql目录了,做软链接:
cd /usr/local/
ln -s mysql-8.0.28-linux-glibc2.12-x86_64/ mysql
效果如下:
创建目录和用户等操作
在MySQL根目录下新建一个文件夹data,用于存放数据
mkdir /usr/local/mysql/data
创建mysql用户组和mysql用户
groupadd mysql
useradd -g mysql mysql
改变 mysql 目录权限
chown -R mysql.mysql /usr/local/mysql/
初始化数据库,创建mysql_install_db安装文件
mkdir /usr/local/mysql/mysql_install_db
chmod 777 /usr/local/mysql/mysql_install_db
自动生成密码的初始化方式
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lower-case-table-names=1
注意控制台会输出你的临时密码(下图是控制台输出,最好把密码复制出来存一下)
如果报错./mysqld: error while loading shared libaries: libnuma.so.1: cannot open shared object file: No such file or directory就是没用安装libnuma,
安装libnma命令
yum install libnuma
yum -y install numactl
yum install libaio1 libaio-dev
mysql配置
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
完全搞不懂这步是为了啥
修改my.cnf文件 vi /etc/my.cnf 内容如下 :
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock
#symbolic-links=0
character-set-server=utf8
port=3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#缓冲池配置,默认128M,自行百度按情况配置
innodb_buffer_pool_size = 6000M
#数据库最大连接数,自行配置
max_connections=1000
#临时表大小
tmp_table_size=2048M
#不大明白,百度吧
skip_name_resolve=1
lower_case_table_names=1
#[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid
#!includedir /etc/my.cnf.d
[client]
socket=/usr/local/mysql/mysql.sock
default-character-set=utf8
建立MySQL服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql //将启动脚本放到开机初始化目录
chmod +x /etc/init.d/mysql //设置权限
添加到系统服务
chkconfig --add mysql
配置全局环境变量
编辑 / etc/profile 文件,vi /etc/profile
在文件最下面添加
export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin:$MYSQL_HOME/lib
如图:
如果之前已经安装过jdk等也配置了环境变量,则拼接到jkd路径后面即可:
设置环境变量立即生效
source /etc/profile
启动MySQL服务
systemctl start mysql 或者service mysql start 都可以
登录mysql及修改密码
mysql -uroot -p 按下回车键会要求输入之前展示的临时密码,注意,这里最好手敲,不要复制粘贴,否则可能失败.成功登陆效果如下:
接下来修改密码
SET PASSWORD FOR root@localhost='123456'; //注意这里123456可以改成其他密码
效果如下:
此时可以输入quit退出mysql连接,然后重新用mysql -uroot -p输入上诉密码测试是否改成功了
接下来就可以测试用navicat或者sqlyog等工具连接数据库了,记得开放防火墙端口或者干脆关闭防火墙:
systemctl stop firewalld
然而访问发现:
开放权限
需要开放权限,比较粗放的方式如下.
在linux重新登录mysql
mysql -uroot -p 密码
use mysql; #选择数据库
update user set host = '%' where user = 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
FLUSH PRIVILEGES; #刷新权限
注意上面的123456可以设置为自己想要的密码
上面的%是所有网段可以访问mysql,也可以对不同用户指定特定ip网段才可以访问,这个就自己百度了.
接着就可以正常通过sqlyog或者navicat访问mysql了: