theboyaply

学,就硬学!

  • Home
  • Archives
  • Java
  • Maven
  • Docker
  • Kubernetes
  • JavaScript
  • ES6
  • Vue
  • 踩坑记录
  • noted

  • 搜索
element ui vue wsimport webservice npm mysql redis node nginx nfs ftp es6 开发工具 vscode 前端 javascript springboot 常见问题 tomcat oracle jenkins maven k8s Linux gitlab docker java

Linux安装MySQL5.7

发表于 2022-01-05 | 分类于 踩坑记录 | 0 | 阅读次数 371

  • 1. 查看是否安装mysql
  • 2. 下载mysql安装包
  • 3. 解压及配置文件
  • 创建mysql用户组及权限
  • 初始化数据库
  • 启/停/登录
  • 重置root密码
  • 创建数据库
  • 新增远程访问用户
  • 远程连接不上问题
  • 开启定时备份

1. 查看是否安装mysql

安装mysql之前,需要查看是否安装了mysql,如果安装则进行卸载,命令:

rpm -qa | grep mysql

卸载命令:

rpm -e --nodeps mysql-*

查看是否安装mariadb数据库,如果存在,则卸载,命令:

rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.35-3.el7.x86_64

2. 下载mysql安装包

结合命令cat /etc/system-release和getconf LONG_BIT查看需要下载的mysql包,命令分别表示系统发行版本和位数。

下载地址:点击访问>mysql官方下载地址<

操作系统可选Linux - Generic,这个下面的安装包是通用的。

本文以mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz为例。链接地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz

3. 解压及配置文件

把下载的安装包放到/data/mysql下并进行解压,然后把解压后的文件重命名为mysql:

[root@% mysql]# pwd
/data/mysql

[root@% mysql]# ls
mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz

[root@% mysql]# tar -zxvf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
[root@% mysql]# mv mysql-5.7.14-linux-glibc2.5-x86_64 mysql

[root@% mysql]# ls
mysql  mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz

复制配置文件并编辑,把mysql下的配置文件覆盖到/etc/my.cnf,并修改/etc/my.cnf内容:

[root@% support-files]# pwd
/data/mysql/mysql/support-files

[root@% support-files]# ls
magic  my-default.cnf  mysqld_multi.server  mysql-log-rotate  mysql.server

[root@% support-files]# cp /data/mysql/mysql/support-files/my-default.cnf /etc/my.cnf
[root@% support-files]# vin /etc/my.cnf

配置内容如下,可根据需要增加其他配置:

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
basedir=/data/mysql/mysql
datadir=/data/mysql/mysql/data
port=3306
user=mysql
# 允许最大连接数
max_connections=400
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 排序规则
collation_server=utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
max_allowed_packet=16M
#linux不区分表大小写0区分1不区分
lower_case_table_names=1
#log-error=/var/log/mariadb/mariadb.log
log-error=/data/mysql/mysql/log/mysql.err
pid-file=/data/mysql/mysql/mysql.pid
# 开启binlog需要指定server-id
server_id=1
# binlog文件的前缀
log-bin=mysql-bin
# binlog文件保存的天数,默认0表示永久保存
expire_logs_days=15
# 缓存大小,一般生产服务器需要配置,建议为服务器总内存50%,默认128M
innodb_buffer_pool_size=4G
innodb_flush_log_at_trx_commit=1
# socket=/var/lib/mysql/mysql.sock
# 建议就放在这个位置,登录mysql时会从这里找mysql.sock
socket=/tmp/mysql.sock
innodb_data_file_path = ibdata1:1G;ibdata2:12M:autoextend:max:5G

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

创建mysql用户组及权限

创建mysql用户组和用户并修改权限:

[root@% mysql]# groupadd mysql
[root@% mysql]# useradd -r -g mysql mysql
[root@% mysql]# chown -R mysql:mysql /data/mysql/mysql

初始化数据库

进入bin目录并执行初始化命令:

[root@% bin]# pwd
/data/mysql/mysql/bin
[root@% bin]# ./mysqld --defaults-file=/etc/my.cnf --basedir=/data/mysql/mysql/ --datadir=/data/mysql/mysql/data/ --user=mysql --initialize

PS:如果运行了命令没输出,查看/mysql/mysql/data目录和/data/mysql/mysql/log目录下没有文件,那就是初始化失败了,可能是/etc/my.cnf配置文件写错了。

按照上面的配置文件,可能是log-error的配置导致的失败,把log-error放到[mysqld_safe]块下再试试。具体原因可以自己搜搜。

查看初始化root密码

[root@% bin]# cat /data/mysql/mysql/log/mysql.err

设置mysql环境变量

把/data/mysql/mysql/bin加入到环境变量中,在末尾追加:

export PATH=/data/mysql/mysql/bin:$PATH

使用source /etc/profile使其生效。

如果配置后,使用mysql命令提示bash: mysql: command not found...,那么再添加一个软连接:

[root@% bin]# ln -s /data/mysql/mysql/bin/mysql /usr/bin

设置开机自启

[root@% bin]# cp /data/mysql/mysql/support-files/mysql.server /etc/init.d/mysql
[root@% bin]# cp /data/mysql/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql

增加 mysql 服务控制脚本执行权限

[root@% bin]# chmod +x /etc/rc.d/init.d/mysql

将 mysql 服务加入到系统服务

[root@% bin]# chkconfig --add mysql

启/停/登录

[root@% bin]# service mysql start
[root@% bin]# service mysql stop
[root@% bin]# service mysql restart
[root@% bin]# mysql -uroot -p

重置root密码

第一次使用root登录,其密码在/data/mysql/mysql/log/mysql.err里面。

查看初始化root密码

[root@% bin]# cat /data/mysql/mysql/log/mysql.err

登录mysql并修改root密码

[root@% bin]# mysql -uroot -p

# 123456是root的新密码
mysql> set password for root@localhost = password('123456');

如果你丢失了初始密码,那么可以在/etc/my.cnf中添加skip_grant_tables=1配置,先跳过权限验证,重启mysql,然后修改root密码。

跳过权限验证后直接进入mysql命令:

># mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.14 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

mysql> update mysql.user set authentication_string=password('123456') where user='root' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
Bye

然后再把/etc/my.cnf中的skip_grant_tables=1配置去掉,重启mysql。

创建数据库

create schema test_database default character set utf8;

这里的character最好和my.cnf中的保持一致,一般都是utf8或utf8mb4。

新增远程访问用户

一般来说是不建议将root用户对外开放,也就是mysql.user表Host的保持设置为localhost。

需要远程访问,可以新增用户:

# 切到mysql数据库
mysql> use mysql;

# 方式1. 如果用户名不存在,该命令会直接创建用户(mysql5.x版本还可以这样搞)
mysql> grant all privileges on *.* to 'account1'@'%' identified by '123456' with grant option;

# 方式2. 先创建用户再赋予权限(不知道哪个版本开始需要先创建用户才行)
mysql> create user 'account1'@'%' identified by '123456';
mysql> grant all privileges on *.* to 'account1'@'%' with grant option;

# 刷新权限
mysql> flush privileges;

模板语句:

grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
# 或
create user '用户名'@'IP地址' identified by '密码';
grant all privileges on 库名.表名 to '用户名'@'IP地址' with grant option;

说明:

参数 参数说明 示例
库名 要远程访问的数据库名称,所有的数据库使用“*” test
表名 要远程访问的数据库下的表的名称,所有的表使用“*” student
用户名 要赋给远程访问权限的用户名称 account1
IP地址 可以远程访问的电脑的IP地址,所有的地址使用“%” %
密码 要赋给远程访问权限的用户对应使用的密码 123456

扩展:

grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接。
‘连接口令’不能为空,否则创建失败

远程连接不上问题

如果远程连接出现如下错误:

2013 - Lost connection to MySQL server at 'reading initial communication packet', system error:  0"Internal error /check (Not system error)"

需要在my.cnf配置文件中的[mysqld]下加上属性skip-name-resolve

[mysqld]
skip-name-resolve
......

开启定时备份

MySQL备份是很必要的事情,所以这里简单介绍一种定时备份的方法。

找一个空间足够的目录,比如/data/mysql,新建备份脚本backup.sh:

time=$(date -d "today" +"%Y%m%d")
/data/mysql/mysql/bin/mysqldump -uroot -p123456  --single-transaction --hex-blob --routines --events --triggers --master-data=2 --set-gtid-purged=OFF --databases yourDataBaseName --max_allowed_packet=512M > /data/mysql/backup/database_$time.sql

其中,yourDataBaseName是你要备份的数据库名称。

赋予执行权限:

# chmod u+x /data/mysql/backup.sh

编辑crontab:

# crontab -e
30 00 * * * sh /data/mysql/backup.sh >> /data/mysql/backup.log 2>&1

该cron表示每天0点30分执行脚本,将日志输出到/data/mysql/backup-log.log。

查看crontab:

# crontab -l

– end –

# Linux # mysql
Linux安装redis
maven archetype
  • 文章目录
  • 站点概览
theboyaply

theboyaply

好记性不如烂笔头

185 日志
13 分类
27 标签
Github E-mail
Creative Commons
0%
© 2019 — 2023 theboyaply
由 Halo 强力驱动
|
主题 - NexT.Gemini
湘ICP备19009291号

湘公网安备 43312402001034号