Linux安装MySQL

前期的Linux环境检测

1、SELinux和系统防火墙

# 需要把 SELinux 设置为disable,并且重启系统
vi /etc/sysconfig/selinux
SELINUX=disable
# 关闭防火墙
chkconfig --list|grep iptables
chkconfig iptables off

2、将系统的IO调度模式设置为deadline模式

vi /sys/block/sda/queue/scheduler
noop anticipatory deadline[cfg]
# 修改IO的调度器需要在/etc/grub.conf中配置才能永久生效
vi /etc/grub.conf
# 最后一行添加
elevator=deadline

3、swap分区设置

swappiness值的大小对如何使用swap分区有着很大的影响。它有0和100两个极限值,0表示最大限度的使用物理内存,这种行为有可能导致系统内存溢出,100则是积极的使用swap分区,并且把内存上面的数据及时的搬到swap分区里。

一般不建议分配swap,或者分配4GB的空间

# 查看系统的swappiness文件
cat /proc/sys/vm/swappiness
sysctl -a|grep swap

4、文件系统的选择

建议选择xfc文件系统,相比与ext4,更加方便管理,支持动态扩容,删除文件也很方便

5、操作系统的限制

ulimit -a

重要的两个参数是 open filesmax user processes

open files是当前服务器支持的最大句柄数,也就是单个进程最多可以访问多少个文件句柄(连接过多会导致打不开表或者访问不到表的现象)。

max user processes 在单个服务器上运行多个MySQL实例时,可能会出现创建不了新连接的情况

为了防止以上两种情况的出现,可以修改系统的软硬限制 /etc/security/limits.conf

vi /etc/security/limits.conf
*  soft  nproc  65535
*  hard  nproc  65535
*  soft  nofile 65535
*  hard  nofile 65535

6、关闭numa

关闭numa有利于更好的分配内存,不需要采取swap的方式来获取内存。关闭方式可以在BIOS、操作系统和数据库启动过程中关闭

numa --interleave=all /usr/local/mysql/bin/mysqld_safe -defaults-file=/etc/my.cnf &

正式的MySQL安装

Linux上安装软件的常见方式

1、源码安装

2、压缩包安装(.tar.gz)

3、编译好的安装包安装(rpm、dpkg等)

4、在线安装(yum)

删除已安装的MySQL

检查mariadb

rpm -qa|grep mariadb
mariadb-server-5.5.60-1.el7_5.x86_64
mariadb-5.5.60-1.el7_5.x86_64
mariadb-libs-5.5.60-1.el7_5.x86_64

如果存在mariadb则删除(yum安装是会覆盖已经存在mariadb)

rpm -e --nodeps mariadb-server
rpm -e --nodeps mariadb
rpm -e --nodeps mariadb-libs

检查mysql

rpm -qa|grep mysql # 存在就删除

1、Yum安装Mysql

step1:添加MySQL Yum Repository

从CentOS 7开始,MariaDB成为Yum源中默认的数据库安装包。也就是说在CentOS 7及以上的系统中使用yum安装MySQL默认安装的会是MariaDB(MySQL的一个分支)。如果想安装官方MySQL版本,需要使用MySQL提供的Yum源。

查看系统版本

cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 

选择对应的版本进行下载, https://dev.mysql.com/downloads/repo/yum/

wget https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm

安装下载下来的源

rpm -Uvh mysql80-community-release-el7-3.noarch.rpm

检查是否安装成功

执行成功后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repomysql-community-source.repo

step2:选择Mysql版本

yum repolist all | grep mysql

切换版本
1、直接切换版本

yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community

2、直接修改 /etc/yum.repos.d/mysql-community.repo enable=0表示禁用

# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

修改后再次查看激活的mysql版本,发现5.7版本已经被激活

yum repolist all | grep mysql
mysql55-community/x86_64           MySQL 5.5 Community Server    disabled
mysql55-community-source           MySQL 5.5 Community Server -  disabled
mysql56-community/x86_64           MySQL 5.6 Community Server    disabled
mysql56-community-source           MySQL 5.6 Community Server -  disabled
mysql57-community/x86_64           MySQL 5.7 Community Server    enabled:    404
mysql57-community-source           MySQL 5.7 Community Server -  disabled
!mysql80-community/x86_64          MySQL 8.0 Community Server    disabled
mysql80-community-source           MySQL 8.0 Community Server -  disabled

step3:安装MySQL

yum -y install mysql-community-server

该命令会安装MySQL服务器 (mysql-community-server) 及其所需的依赖、相关组件,包括mysql-community-client、mysql-community-common、mysql-community-libs等

step4:启动MySQL

# 启动 状态 停止 重启mysql服务
systemctl start/status/stop/restart mysqld.service
# 查看初始密码,初始用户是root@localhost,密码存放在日志文件中
grep 'temporary password' /var/logs/mysqld.log
# 修改默认密码
mysql -uroot -p
# 输入密码登录之后,进入修改密码,如果密码过于简单,可以修改密码策略
# 修改密码默认策略 validate_password_policy
validate_password_policy=0 #只校验密码长度,只要长度跟 validate_password_length一样即可,默认长度是8位
validate_password_policy=1 #这个时候首先要满足的是validate_password_policy=0时的验证要求。然后现去验证密码中的数字、大小写、特殊字符个数。这些又分别由validate_password_number_count,validate_password_mixed_case_count,validate_password_special_char_count 这几个参数来控制。
validate_password_policy=2 # 这个时候必须先满足0,1的要求,然后它还追加了一个,对于密码中任意连续4个(或4个让上)字符不得是字典中的单词(validate_password_dictionary_file)
# 关闭密码校验
vi /etc/my.cnf
# 添加以下配置,并重启mysql服务
validate_password=OFF
# 重置密码
alter user root@localhost identified by 'password';

允许root用户远程访问

# 进入MySQL进行授权
grant all privileges on *.* to 'root'@'%' identified by 'password' with grant option;

设置编码

show variables like 'character%';
vi /etc/my.cnf
[mysqld]
character_set_server=utf8
init-connect='SET NAMES utf8'

设置开机自启动

systemctl enable mysqld
systemctl daemon-reload

2、使用RPM包安装MySQL

RPM包下载地址: https://downloads.mysql.com/archives/community/ 选择合适的版本

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

解压

tar -zxvf mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar

解压后,需要安装的RMP包主要以下4个。也可以单独的下载以下的RPM包进行安装

mysql-community-libs-5.7.28-1.el7.x86_64.rpm
mysql-community-common-5.7.28-1.el7.x86_64.rpm
mysql-community-client-5.7.28-1.el7.x86_64.rpm
mysql-community-server-5.7.28-1.el7.x86_64.rpm

各rpm包是有依赖关系的,所以需要按照一定顺序进行安装,安装期间如果提示缺少哪些依赖也要先安装相应的包

rpm -ivh mysql-community-common-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.28-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.28-1.el7.x86_64.rpm

还有一种简单的方式,可以自动处理各个包之间的依赖关系并自动下载缺少的依赖:

yum install mysql-community-{server,client,common,libs}-*

注意:上面的yum install命令需要在tar解压之后的各个rpm包所在目录内执行,否则就变成yum方式安装了,需要配置MySQL的yum源并且速度很慢,还要当前机器支持外网访问

3、使用压缩包进行安装

下载对应的 tar 包: https://dev.mysql.com/downloads/mysql/

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz

step1:安装mysql依赖库

MySQL依赖libaio库,如果没有先安装一下

yum -y install libaio

step2:创建mysql用户

不需要登录的一个系统账号,启动MySQL服务时会使用该账号

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

step3:解压配置

cd /usr/local/mysql
tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
# 初始化
bin/mysqld --initialize --user=mysql

如果初始化出现以下错误

error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

是因为libnuma没有安装(或者默认安装的是32位),我们这里需要64位的

yum -y install numactl.x86_64

初始化完成后会有一行日志显示出临时密码。

CentOS安装MySQL8

与上面使用yum安装MySQL一样,我们只需激活MySQL8的版本即可

cat /etc/yum.repos.d/mysql-community.repo
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

安装MySQL

# 直接执行
dnf install @mysql
# 启动mysql并设置开启自启动
systemctl enable --now mysqld
# 查看mysql状态
systemctl status mysqld
# 运行mysql_secure_installation脚本,设置密码
mysql_secure_installation

设置密码的步骤

[root@docker packet]# mysql_secure_installation
Securing the MySQL server deployment.
# 是否进入密码配置
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
# 设置密码强度 0 1 2,我设置0
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Please set the password for root here.
# 输入两次新密码
New password: 
Re-enter new password: 
Estimated strength of the password: 50 
# 确认是否继续使用提供的密码
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
# 是否移除匿名用户
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
# 是否不允许root远程登陆
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n
# 是否移除test数据库
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
    - Dropping test database...
      Success.
    - Removing privileges on test database...
      Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
# 是否重新载入权限表
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done! 

配置远程登陆

本机登录MySQL,将root用户的host字段设为'%',意为接受root所有IP地址的登录请求。

mysql -uroot -p
# input password
use mysql;
update user set host='%' where user='root';
flush privileges;

安装后可能出现的问题

使用root用户启动mysql失败

# 问题
mysqld
2020-07-27T14:26:54.337726Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-07-27T14:26:54.353607Z 0 [Note] mysqld (mysqld 5.7.29-log) starting as process 7339 ...
2020-07-27T14:26:54.356757Z 0 [ERROR] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
2020-07-27T14:26:54.356784Z 0 [ERROR] Aborting
2020-07-27T14:26:54.356805Z 0 [Note] Binlog end
2020-07-27T14:26:54.356905Z 0 [Note] mysqld: Shutdown complete

systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

问题的根源都是使用root用户安装的mysql,在使用root用户启动时就会报错

解决方法1:

mysqld --user=root start

解决方法2:

# 增加跳过权限表参数
mysqld --skip-grant-tables --skip-networking --user=root &

单个mysql配置文件启动多个mysql实例:

https://dev.mysql.com/doc/refman/8.0/en/using-systemd.html

MySQL使用select into outfile导出报错

select * from t2 into outfile 'root/mysql/blk/temp/t2.sql';
# 错误信息如下
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

错误的原因是: mysql默认配置了导入和导出的文件路线,即 secure-file-priv参数,导入或者导出的文件路径与默认的路径冲突时就会报错

修改的方案也有两种:

1、修改文件的路径

2、修改配置文件

mysql> show variables like '%secure%'\G;
*************************** 1. row ***************************
Variable_name: require_secure_transport
        Value: OFF
*************************** 2. row ***************************
Variable_name: secure_auth
        Value: ON
*************************** 3. row ***************************
Variable_name: secure_file_priv
        Value: /var/lib/mysql-files/
3 rows in set (0.00 sec)

secure_file_priv 参数有三种取值

  • null,不允许导入和导出
  • /path,指定固定的路径导入和导出
  • '', 不对mysql的导入和导出做限制

你可能感兴趣的:(Linux安装MySQL)