linux - 安装mysql
下载
https://downloads.mysql.com/archives/community/
根据自己的 linux,选择 mysql 版本,我的 linux 版本是 Alibaba Cloud Linux 3.2104 LTS 64 位,
选择:mysql-8.0.32-linux-glibc2.12-x86_64.tar
安装主程序
将安装包上传到 linux 系统,解压之后,就完成主程序的安装了。
数据和主程序的文件夹,可以分开指定,因此主程序不需要很大的磁盘控件,放在自己喜欢的位置即可。
本次部署,我将主程序,安装到了 /usr/local/mysql 目录。
配置文件
# 新建 mysql 配置文件
touch /etc/my.cnf
# 编辑文件
vim /etc/my.cnf
将下列内容复制到 my.cnf 文件中,可按需调整内容。
[mysqld]
# 程序路径:主程序安装路径
basedir=/usr/local/mysql
# 数据路径:包括各类日志、数据库文件等等,一般设置这个就够用了
datadir=/usr/local/mysql/data
# socket 文件:默认使用 datadir
# socket=/usr/local/mysql/data/mysql.sock
# 错误日志:默认使用 datadir
# log-error=/usr/local/mysql/data/error.log
# pid 文件:默认使用 datadir
# pid-file=/usr/local/mysql/data/mysql.pid
# 文件软连接
symbolic-links=0
# 解决高版本产生 1055 异常报错的问题
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 服务 id:做集群的时候,需要保证唯一
# server-id = 1
# binlog 日志:默认使用 datadir,其中最后一个 binlog 为文件名
# log-bin=/usr/local/mysql/data/binlog
# 集群同步时忽略的数据库
# binlog-ignore-db=mysql
# 是否只读:1 代表只读, 0 代表读写
# read-only=0
# 监听端口
# port = 3306
# 监听的 ip 地址
# bind-address = 0.0.0.0
环境变量
设置完环境变量之后,可以在任意位置使用 mysql 命令,这一步不是必须的,不设置不影响程序运行。
# 编辑文件
vim /etc/profile
# 复制下列所有内容,粘贴在文件末尾
export MYSQL_HOME=/usr/local/mysql
export MYSQL_PATH=$MYSQL_HOME/bin
export PATH=$PATH:$MYSQL_PATH
# 立即生效
source ~/.bash_profile
# 查看环境变量
env
增加用户组
需要避免所有人都用 root 账号,创建一个 mysql 专用账号,注意这是 linux 系统的用户
# 创建用户组
groupadd mysql
# 创建用户
useradd -r -g mysql mysql
# 设置密码
passwd [user]
启动数据库
# 初始化,一定要保留执行结果,执行结果的最后一行,包含初始化密码,后续操作需要这个密码
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# 直接执行通常会报错,需要先执行下一句
yum install -y libaio
# 重新初始化,一定要保留执行结果,执行结果的最后一行,包含初始化密码,后续操作需要这个密码
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
# 启动 mysql
/usr/local/mysql/support-files//mysql.server start
# 重启 mysql,如果你需要变动 my.cnf 配置,重启即可
/usr/local/mysql/support-files//mysql.server restart
开机自启
高版本的 linux 系统,这样设置可能无效,要通过 systemctl enable 命令设置自启。
# 创建一个同步链接(使用 cp 命令也行)
# 完成这个命令之后,就可以使用 service 命令的方式启动 mysql
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# 添加可执行权限
chmod +x /etc/init.d/mysql
# 注册启动服务
chkconfig --add mysql
# 查看是否添加成功
chkconfig --list
# 如果 2345 不是 on 的状态,再执行这个
chkconfig --level 2345 mysql on
# 注意:卸载 mysql 的时候,要记得清除文件 /etc/init.d/mysql
初始化数据库
如果启动数据库过程中,忘记了初始密码,除了重装之外,可以使用下面这个手段:
修改 my.cnf 文件,在 mysqlId 段落,添加下面这一行,之后不用密码就能登录。
修改 .cnf 文件之后,需要执行 service mysql restart 进行重启生效,操作结束之后记将配置文件还原。
[mysqld]
skip-grant-tables
下面开始正式初始化
-- 登录账号
mysql -u root -p
-- 修改了 cnf 文件,有时候会无法保存数据,那就先执行一下这一句
flush privileges;
-- 修改密码(两个命令都可用)
-- SET PASSWORD = PASSWORD('root');
-- 修改密码(两个命令都可用)
alter user 'root'@'localhost' identified by 'root';
-- 密码永不过期
alter user 'root'@'localhost' password expire never;
-- 允许任何主机登录
update user set host = '%' where user = 'root';
-- 载入信息使之生效
flush privileges;
一些报错问题
老版本 navicat 登录账号可能会报错,报错信息包含: “caching_sha2_password……” ,这是因为加密规则不兼容导致,需要指定加密规则:mysql_native_password。
alter user 'root'@'localhost' identified with mysql_native_password by 'root';
安装 MySQL-8 的时候,尽量重新授权一次,确保拥有所有权限,后期发现有权限缺失的情况
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
防火墙开放 3306
添加防火墙策略,一般命令如下。
如果是生产环境,先询问客户,不要擅自禁用、打开防火墙;如果是云平台(阿里云),需要在平台上配置。
firewall-cmd --list-all
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all