theboyaply
theboyaply
发布于 2022-01-05 / 545 阅读
0
0

Linux安装MySQL5.7

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-releasegetconf 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中的保持一致,一般都是utf8utf8mb4

新增远程访问用户

一般来说是不建议将root用户对外开放,也就是mysql.userHost的保持设置为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 –


评论