mysql安装(linux下,二进制安装,8.0)
【0】环境
OS:Centos7.8
SF:Mysql8.0+最新版
【1】下载解压
【1.1】下载
官网:https://dev.mysql.com/downloads/mysql/
linux:wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz
我们这里要一个最小安装版就好了
那么,我这里实际下载演示的文件的是8.0.20
【1.2】上传|解压|软链接
(1)构造目录上传文件
mkdir /soft #上传,无论是rz,或者其他客户端工具,或者用的linux下载直接copy/mv,把文件放到/soft 目录下
(2)解压目录
在8.0.16之后使用了xz压缩方式,而不是传统的gz压缩方式,所以解压代码略有不同
#以前的 .gz的压缩表使用 -zxvf,现在 .xz的压缩包使用 -Jxvf
tar -Jxvf mysql-8.0.20-linux-x86_64-minimal.tar.xz
(3)生成软链接
为了方便后续引用这个目录,给个软链接,方便书写该目录
ln -s mysql-8.0.20-linux-x86_64-minimal mysql
最终效果
【2】环境准备(防火墙|SELINUX|环境变量)
【2.1】关闭SELINUX
SELINUX的三种模式:
enforcing :- SELinux security policy is enforced.(强制模式,违反SELinux 规则的行为会被阻止且记录到日志中)
permissive :- SELinux prints warnings instead of enforcing.(宽容模式,违反SELinux 规则的行为只会记录到日志中,不会被阻止)
disabled :- No SELinux policy is loaded.(关闭SELinux)
查看SELinux状态: 1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: enabled 2、getenforce ##检查当前限制级别
设置完成后,应该如下:
这里我们,临时修改为宽容模式,再修改配置文件永久关闭
#1、临时关闭(不用重启机器): setenforce 0 ##设置SELinux 成为permissive模式 ##setenforce 1 设置SELinux 成为enforcing模式 #2、修改配置文件需要重启机器: 修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled
设置完成后,文件应该修改如下:
【2.2】关闭防火墙
简单搭建就不做防火墙控制了,后续有兴趣大家可以自行百度如何添加mysql到防火墙白名单;
stop firewalld
status firewalld
最终效果如下:
【2.3】环境变量
我们因为软件放到这个路径的 /soft/mysql,所以我们加到环境变量里的路径就是 /soft/mysql/bin
echo "export PATH=${PATH}:/soft/mysql/bin" echo "export PATH=${PATH}:/soft/mysql/bin">>/etc/profile source /etc/profile
设置完后,我们看看mysql命令是否可以直接使用了,如下图,就OK了。
【3】安装mysql
【3.1】构建账户与目录
(1)构建账户
groupadd mysql
useradd mysql -g mysql -s /sbin/nologin
(2)构建目录/设置权限
mkdir -p /data/mysql/3306 mkdir -p /data/mysql/3306/data chmod 755 -R /data/mysql chown -R mysql:mysql /data/mysql umask 0022 /data/mysql touch /etc/my.cnf chown mysql:mysql /etc/my.cnf chmod 755 /etc/my.cnf
【3.2】mysql配置文件
这里为什么要把配置文件放在 /etc/my.cnf ? 因为默认 mysql 第一引用配置文件的路径就是这个,为了省却麻烦,就放在这里吧。
vim /etc/my.cnf
[client] port = 3306 socket = /data/mysql/3306/mysql.sock default-character-set=utf8mb4 [mysql] disable-auto-rehash #允许通过TAB键提示 default-character-set = utf8mb4 connect-timeout = 10 [mysqld] user=mysql server-id = 3306 port = 3306 socket = /data/mysql/3306/mysql.sock pid-file = /data/mysql/3306/mysql.pid basedir = /soft/mysql datadir = /data/mysql/3306/data #bind_address = 10.10.10.11 autocommit = 1 default_authentication_plugin=mysql_native_password character-set-server=utf8mb4 explicit_defaults_for_timestamp=true lower_case_table_names=1 back_log=103 max_connections=10000 max_connect_errors=100000 table_open_cache=512 external-locking=FALSE max_allowed_packet=32M sort_buffer_size=2M join_buffer_size=2M thread_cache_size=51 transaction_isolation=READ-COMMITTED tmp_table_size=96M max_heap_table_size=96M ###***logs long_query_time = 10 slow_query_log = 1 slow_query_log_file=/data/mysql/3306/slow.log #log-warnings = 1 log_error_verbosity=3 log-error = /data/mysql/3306/mysql.err log_output = FILE #参数log_output指定了慢查询输出的格式,默认为FILE,你可以将它设为TABLE,然后就可以查询mysql架构下的slow_log表了 #log-queries-not-using-indexes #log-slow-slave-statements max_binlog_size = 1G #max_relay_log_size = 1G # replication log-bin=/data/mysql/3306/mysql-bin #server-id=1 #binlog_format= ROW #gtid_mode = on #enforce_gtid_consistency = 1 #log_slave_updates = 1 #master-info-repository=TABLE #relay-log-info-repository=TABLE # innodb storage engine parameters innodb_buffer_pool_size=500M innodb_data_file_path=ibdata1:100M:autoextend:max:5G #redo innodb_temp_data_file_path = ibtemp1:100M:autoextend:max:10G #innodb_file_io_threads=4 #默认的是4 innodb_log_buffer_size=16M innodb_log_file_size=256M #undo innodb_log_files_in_group=2 innodb_lock_wait_timeout=50 innodb_file_per_table=1 #独立表空间
【3.3】mysql 初始化
创建错误日志,以防没权限生成
touch /data/mysql/3306/mysql.err chmod 755 /data/mysql/3306/mysql.err chown mysql:mysql /data/mysql/3306/mysql.err
注意,我这里加了 insecure,不会设置初始mysql 密码
mysqld --defaults-file=/etc/my.cnf --datadir=/data/mysql/3306/data --user=mysql --initialize-insecure --console
如果没有报错显示在屏幕上,那多半没有问题了,我们进目录看看有没有问题,数据是否生成,详情如下:
再看看错误日志文件,mysql.err 中有没有报错
cat mysql.err|grep "\[error\]"
如下图:没有任何输出就没有问题了。
【3.4】启动 mysql
mysqld_safe --defaults-file=/etc/my.cnf &
核验 mysql 服务是否启动:如下图,就启动成功了
【3.5】登录mysql,修改密码
直接输入 mysql 就可以进去,因为我们没有配置密码,用了 insecure 选项
修改密码为123456
alter user root@localhost identified with mysql_native_password by '123456'; flush privileges;
然后我们重登验证,直接mysql无法登录了,需要密码了
【3.6】新建外网可以连接的 root 账户
#创建远程可以登录的 root 账户,设置密码为 123456
create user 'root'@'%' identified with mysql_native_password by '123456'; flush privileges;
#核验
select user,host from mysql.user;
然后我们用 navicat 连接测试一下
到此,就装好了!,如果只是简单用一下,这就够了。
【4】把 mysql 封装成系统服务
【4.1】CentOS7.X
(1)编辑配置文件:vim /usr/lib/systemd/system/mysql.service
注意,如果要用以下代码:需要修改2个地方,下面的这个值是本文规划的路径,若是和本文规划不同请自行替换
PIDFile=/data/mysql/3306/mysql.pid
ExecStart=/soft/mysql/support-files/mysql.server start
[Unit] Description=Mysql After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/data/mysql/3306/mysql.pid ExecStart=/soft/mysql/support-files/mysql.server start ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=false [Install] WantedBy=multi-user.target
(2)停止现在的服务;
#先看看mysql进程是否启动了 ps -ef|grep mysql #如果启动了为了测试我们可以先关闭或者强制杀死
(3)使用服务
#【1】重新加载服务列表,以便可以识别我们新建的服务 systemctl daemon-reload #【2】启动mysql /关闭 mysql systemctl start mysql #systemctl stop mysql #【3】查看mysql 服务状态 systemctl status mysql #【4】设置 mysql 服务开机自启 systemctl enable mysql
启动了之后,我们可以看到状态
从上到下,我们一个一个说:
第1个框中的 enable :这个就是允许开机自启
第2个框中的 active(running):这个就是表示当前的服务状态,是正在运行的
第3个框中的 这2个表示的是启动命令
【4.2】 CentOS6.X
#【1】脚本封装成服务
cp /soft/mysql/support-files/mysql.server /etc/init.d/
#【2】启动、停止服务
service mysql start
#service mysql stop
#【3】查看状态
service mysql status
#【4】开机自启
chkconfig --level 3 httpd on
【5】操作系统优化
参考:https://www.cnblogs.com/gered/p/10296038.html
【6】本文自动化安装脚本
#mysql测试机自动化安装 flag=`rpm -qa|grep mariadb` if [ ${flag} ];then rpm -e ${flag} --nodeps fi cd /soft tar -Jxvf mysql-8.0.20-linux-x86_64-minimal.tar.xz ln -s mysql-8.0.20-linux-x86_64-minimal mysql echo "export PATH=${PATH}:/soft/mysql/bin" >>/etc/profile source /etc/profile groupadd mysql useradd mysql -g mysql -s /sbin/nologin mkdir -p /data/mysql/3306/data chown -R mysql:mysql /etc/my.cnf chmod 755 /etc/my.cnf touch /data/mysql/3306/mysql.err chmod 755 -R /data/mysql chown -R mysql:mysql /data/mysql mysqld --defaults-file=/etc/my.cnf --initialize-insecure vi /usr/lib/systemd/system/mysql.service
#[Unit] Description=Mysql After=syslog.target network.target remote-fs.target nss-lookup.target #[Service] Type=forking PIDFile=/data/mysql/3306/mysql.pid ExecStart=/soft/mysql/support-files/mysql.server start ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=false [Install] WantedBy=multi-user.target
systemctl daemon-reload systemctl start mysql systemctl enable mysql