目录
软件准备
Linux服务器版本:CentOS Linux release 7.6.1810 (Core)
MySQL软件下载官网:
MySQL :: Download MySQL Community Server (Archived Versions)
我的系统是64位,选择相应选项下载。
创建用户和安装目录
useradd mysql
会自动创建mysql同名的用户组。
mkdir -p /home/mysql/data
chown -R mysql:mysql /home/mysql/data
mysql安装
解压mysql
tar -xvf mysql-5.7.24-linux-glibc2.12-x86_64.tar
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
解压后目录如下:
改目录名字:
mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql57
编辑my.cnf文件
vim /etc/my.cnf
[mysqld]
basedir=/home/mysql/mysql57
datadir=/home/mysql/mysql57/data
#socket=/var/lib/mysql/mysql.sock
socket=/home/mysql/mysql57/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
#数据库服务器id,这个id用来在主从服务器中标记唯一mysql服务器
server-id = 1
#系统数据库编码设置,排序规则
character_set_server = utf8mb4
collation_server = utf8mb4_bin
#可能的连接数
#指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。
back_log = 1024
#linux下要严格区分大小写,windows下不区分大小写
#1表示不区分大小写,0表示区分大小写。
#lower_case_table_names = 0
lower_case_table_names = 0
#默认sql模式,严格模式
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#是MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段
#如果不能,可以尝试增加sort_buffer_size变量的大小
sort_buffer_size = 16M
#应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的时候(all/index join),
#为了减少参与Join的“被驱动表”的读取次数以提高性能,需要使用到 Join Buffer 来协助完成 Join操作。
#当 Join Buffer 太小,MySQL 不会将该 Buffer 存入磁盘文件,而是先将Join Buffer中的结果集与需要 Join 的表进行 Join 操作
#然后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,
#如此往复。这势必会造成被驱动表需要被多次读取,成倍增加 IO 访问,降低效率。
#若果多表连接需求大,则这个值要设置大一点。
join_buffer_size = 16M
#索引块的缓冲区大默认16M
key_buffer_size = 15M
# 消息缓冲区会用到该列,该值太小则会在处理大包时产生错误。如果使用大的text,BLOB列,必须增加该值
max_allowed_packet = 32M
# mysql服务器最大连接数值的设置范围比较理想的是:服务器响应的最大连接数值占服务器上限连接数值的比例值在10%以上
# Max_used_connections / max_connections * 100%
max_connections = 512
# 阻止过多尝试失败的客户端,如果值为10时,失败(如密码错误)10次,mysql会无条件阻止用户连接
max_connect_errors = 1000000
#单服务器环境,使用skip-external-locking,关闭外部锁定,
#多服务器使用同一个数据库目录时,必须开启external-locking,也就是说注释掉skip-external-locking
skip-external-locking
#最大的空闲等待时间,默认是28800,单位秒,即8个小时
#通过mysql客户端连接数据库是交互式连接,通过jdbc连接数据库是非交互式连接
#交互式连接超时时间,超过这个时间自动断开连接
interactive_timeout = 600
#非交互式连接超时时间,超过这个时间自动断开连接
wait_timeout = 600
#它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)
#如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
tmp_table_size = 96M
max_heap_table_size = 96M
##慢查询,开发调式阶段才需要开启慢日志功能。上线后关闭
slow_query_log = OFF
#慢日志文件路径
slow_query_log_file = /home/mysql/mysql57/logs/slow_query.log
#该值是ON,则会记录所有没有利用索引来进行查询的语句,前提是slow_query_log 的值也是ON
log_queries_not_using_indexes = ON
#记录管理语句
log-slow-admin-statements
#MySQL能够记录执行时间超过参数 long_query_time 设置值的SQL语句,默认是不记录的。超过这个时间的sql语句会被记录到慢日志文件中
long_query_time = 2
#默认使用InnoDB存储引擎
default_storage_engine = InnoDB
[mysqld_safe]
#log-error=/var/log/mariadb/mariadb.log
pid-file=/home/mysql/mysql57/mariadb/mariadb.pid
log-error=/home/mysql/mysql57/mariadb/mariadb.log
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
进入mysql的bin目录:
cd /home/mysql/mysql57/bin
./mysqld --user=mysql --basedir=/home/mysql/mysql57/ --datadir=/home/mysql/mysql57/data/ --lower-case-table-names=1 --initialize
其中:--lower-case-table-names=1 表示表名不区分大小写
得到的root的临时密码是I!>*29(NzFI3
如果因为配置问题导致初始化失败,只能删除data目录,然后重新初始化
修改support-files/mysql.server文件中5个路径,路径是你自己的安装路径
启动服务:
./mysql.server start
启动报错,经查询是因为 /etc/my.cnf里面的datadir写错了。
修改后重启:
登录mysql,密码是刚才的初始化密码
报错原因是我在 /etc/my.cnf里写了socket的路径,而在/tmp目录下没有,创建一个软连接即可:
ln -s /home/mysql/mysql57/mysql.sock /tmp/mysql.sock
重新启动成功。
加入service启动项
cp mysql.server /etc/rc.d/init.d/mysqld
systemctl daemon-reload
service mysqld restart
修改密码为root,实际应用场景,这个密码需要设计得更复杂,通常包含大小写字母、符号等
set password for root@localhost = password('root');
flush privileges;
查看目前的数据库:
show databases;
选择mysql数据库:
修改远程连接数据库并生效
update user set host='%' where user='root';
flush privileges;
远程连接成功!
创建新用户:
CREATE USER 'wjz'@'LOCALHOST' IDENTIFIED BY '123';
'%' - 所有情况都能访问
‘localhost’ - 本机才能访问
’111.222.33.44‘ - 指定 ip 才能访问
更改wjz用户可以远程访问数据库
alter user 'wjz'@'%' identified with mysql_native_password by '123';
创建新数据库:
CREATE DATABASE test;
用户授权:
grant all on 数据库名.数据库表 to 用户名@'%' identified by "密码";
all 可以替换为 select,delete,update,create,drop
数据库名 所有的 用*
数据库表 所有的 用*
增加wjz用户访问mysql数据库的权限
grant all privileges on test.* to wjz@'%' identified by "password" ;
flush privileges;
mysql5.7与8.0密码加密方式
1.mysql5.7默认是方式是mysql_native_password;
2.mysql8.0默认是caching_sha2_password
数据库备份:
方式1:
备份步骤
1、向所有表施加读锁
FLUSH TABLES WITH READ LOCK;
2、备份数据文件
mkdir /mysql_bak
cp -a /mysql57/* /mysql_bak
3.模拟数据丢失并恢复
数据丢失
rm -rf /mysql57l/*
恢复数据
cp -a /mysql_bak/* /mysql57
重启服务
方式2:
mysqldump
备份前应退出MySQL,转到在bin目录下键入:mysqldump -u (用户名) -p(密码) (所要备份的库名) > (将要备份到的文件名,通常文件类型为.sql)
同版本的数据库之间可以全库备份,不同版本数据库之间建议单库备份!!!
全库备份:
mysqldump -uroot -p --all-databases --lock-tables=0 > all.sql.bak
参数说明:
--all-databases 指定所有的数据库 --lock-all-tables 表示锁定所有的表
-lock-tables=0 加上0这个参数,表示不锁表备份
单库备份:
mysqldump -uroot -p 数据库名 >testbak.sql
二、还原
方法一:
退出MySQL,转到在bin目录下键入:mysql -u (用户名) -p(密码) (将要还原到的位置,填数据库名) < (备份文件名)
注意:首先,说还原最容易被忽略的地方,博主初学MySQL时就因为这而犯难。特别要注意被还原的文件中数据库或表中所包含的格式,必须满足在某数据库中还原的该数据库也具有同样格式!如:utf8格式,中英文符号,空格等等。
mysql -u root -p 数据库名<all.sql.bak
mysql5.7数据库mysqldump和XBK备份和恢复_qq_47501059的博客-CSDN博客_mysql5.7数据备份
参考文章:
在linux下安装mysql5.7_开心lulu的博客-CSDN博客_centos7编译安装mysql5.7
systemctl命令_怎么把mysqld.service服务加入到systemctl_weixin_39758229的博客-CSDN博客