avatar

目录
CentOS 7 上部署 MySQL

第一步

①建立一个mysql的组

Code
1
groupadd mysql

②建立mysql用户,并放到mysql组

Code
1
useradd -r -g mysql mysql

③给mysql用户设置密码

Code
1
passwd mysql

第二步

①下载安装包

Code
1
2
wget https://downloads.mysql.com/archives/get/file/mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz   
# 此处是MySQL是8.0.17版本 建议在/usr/local/ 目录下下载 因为这个目录一般是用户自行安装的软件

②解压

Code
1
tar xvf mysql-8.0.17-linux-glibc2.12-x86_64.tar.xz  # 解压到/usr/local/下

③改名

Code
1
mv mysql-8.0.17-linux-glibc2.12-x86_64 mysql # 改名

第三步

①将mysql目录中的support-files中的my_default.cnf拷贝到/etc/my.cnf

Code
1
cp my_default.cnf /etc/my.cnf  # 覆盖文件

若在support-files中没有my_default.cnf文件,则自己创建,具体内容如下

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
[mysqld]
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id = 1
#服务端口号 默认3306
port = 3306
#mysql安装根目录
basedir = /usr/local/mysql
bind-address = 0.0.0.0
#mysql数据文件所在位置
datadir = /usr/local/mysql/data
#临时目录 tmpdir = /tmp
#设置socke文件所在目录
socket = /tmp/mysql.sock
#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
# skip-external-locking
#只能用IP地址检查客户端的登录,不用主机名
skip_name_resolve = 1
#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能) transaction_isolation = READ-COMMITTED
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#最大连接数
max_connections = 400
#最大错误连接数
max_connect_errors = 1000
#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp = true
#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet = 128M
#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭  MySQL默认的wait_timeout 值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800
#内部内存临时表的最大值 ,设置成128M。 比如大数据量的group by ,order by时可能用到临时表, 超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 134217728
max_heap_table_size = 134217728
#禁用mysql的缓存查询结果集功能  后期根据业务情况测试决定是否开启  大部分情况下关闭下面两项 query_cache_size = 0
# query_cache_type = 0
[client]
#端口号
port = 3306
#socket连接文件
socket = /tmp/mysql.sock
[log]
#数据库错误日志文件
log_error = error.log
#慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = slow.log
#检查未使用到索引的sql
log_queries_not_using_indexes = 1
#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
log_throttle_queries_not_using_indexes = 5
#作为从库时生效,从库复制中如何有慢sql也将被记录
log_slow_slave_statements = 1
#慢查询执行的秒数,必须达到此值可被记录
long_query_time = 8
#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit = 100
#mysql binlog日志文件保存的过期时间,过期后自动删除
expire_logs_days = 5

②复制mysql.server/etc/init.d/

Code
1
cp mysql.server /etc/init.d/mysql

③修改 /etc/init.d/mysql参数,给予2个目录位置

Code
1
vi /etc/init.d/mysql

更改的内容

Code
1
2
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

④ 给目录/usr/local/mysql更改拥有者

chown -R 用户名:组名 /usr/local/mysql/

Code
1
chown -R mysql:mysql /usr/local/mysql/

第四步

初始化MySQL并配置软链接

①初始化MySQL

进入到mysql的bin目录下

Code
1
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

此时在MySQL目录中生成一个data目录,说明初始化已将完成

!!!——>这里会生成一个临时密码(保存记住,后面要用到)<——!!!

②给数据库加密

Code
1
./mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

③启动MySQL

Code
1
./mysqld_safe --user=mysql &   # &符号:把当前进程丢给后台

④运行MySQL

Code
1
./mysql -uroot -p

输入你的临时密码就可以进入

跳过登录

一、

或者你可以选择跳过登录,具体步骤如下

  1. /etc/my.cnf文件中添加免密登录

    Code
    1
    skip-grant-tables
  2. 一般情况下修改配置文件都需要重启服务

    Code
    1
    sudo service mysql restart
  3. 运行MySQL不用输入密码就可以进入数据库了

⑤修改密码

Code
1
set password=password('你的密码');

⑥配软连接

Code
1
ln -s  /usr/local/mysql/bin/mysql  /usr/bin/mysql

二、如果上面修改密码不行,请使用下面命令

MySQL5 的密码在 /var/log/mysqld.log

1、同样在my_cnf 中加入 skip-grant-tables

2、重启MySQL

Code
1
sudo service mysql restart

3、给root用户重置密码

①进入MySQL

Code
1
2
3
4
mysql  
或者
mysql -u root -p
password 直接回车

②查看当前root用户相关信息,在mysql数据库的user表中

Code
1
select host, user, authentication_string, plugin from user;

host: 允许用户登录的ip‘位置’%表示可以远程;

user:当前数据库的用户名;

authentication_string: 用户密码;在mysql 5.7.9以后废弃了password字段和password()函数;

plugin: 密码加密方式;

先将authentication_string字段设置为空

Code
1
update user set authentication_string='' where user='root';

③退出mysql, 删除/etc/my.cnf文件最后的 skip-grant-tables 重启MySQL服务

④使用root用户进行登录

因为上面设置了authentication_string为空,所以可以免密码登录

Code
1
2
mysql -u root -p  
passwrod:直接回车

⑤修改root用户的密码

Code
1
2
ALTER user 'root'@'localhost' IDENTIFIED BY 'password';  
# password ——> 你需要设置的密码

至此修改成功,从新使用用户名密码登录即可;

第五步

你要想访问你的远程MySQL,就要完成以下几步,不需要的话略过!

①关闭服务器防火墙

Code
1
systemctl stop firewalld

②进入mysql中,选中mysql库,修改用户的host为%(匹配所有ip)。比如修改root用户:

Code
1
2
use mysql;
update user set host='%' where user='root';

③刷新权限

Code
1
flush privileges;

此时会有一个问题,可视化工具或一部分用户无法连接,因为加密方式不一样,修改加密方式

Code
1
2
3
ALTER USER 'root'@'%' IDENTIFIED BY 'mysql' PASSWORD EXPIRE NEVER;
# | | |
# 自己的用户名和host 自己的密码,此步骤也可修改密码

Code
1
2
3
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql';
# |
# 两次密码一致

Code
1
flush privileges;

第六步

配置开机启动

我这里用的是chkconfig

①添加服务mysql

Code
1
chkconfig --add mysql

②设置服务开机自启

Code
1
chkconfig mysql on

③进行查看启动状态

Code
1
chkconfig --list

如果 mysql 的2,3,4,5都是on的话,说明成功

如果想要重启MySQL服务话输入如下命令,因为我这里用的是chkconfig,要重启的话是

Code
1
reboot

会使云服务器重启;所以我这里用的是

Code
1
2
3
4
sudo service mysql restart    
# 或者是
chkconfig off mysql # 关闭MySQL服务
chkconfig on mysql # 打开MySQL服务

因为我这里用的是阿里云服务器,所以要去云服务器控制台

登录阿里云——>控制台——>云服务器ECS——>实例——>安全组——>添加安全规则

规则方向 授权策略 协议类型 优先级 授权类型 授权对象
入方向 允许 全部 1 IPv4地址段访问 0.0.0.0/0

到这一步应该就完成了!远程访问就可以了!

如果还是不能远程访问的话(指的是上面的步骤没有报错);

检查问题

①进入到服务器的MySQL,使用mysql库,查看user表中host、``userauthentication_stringplugin`字段是否与下面我字段一致

Code
1
2
use mysql;
select host, user, authentication_string, plugin from user;

查取user表中以下字段是否正确

host user authentication_string plugin
% root *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA mysql_native_password
localhost mysql.infoschema $ A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED caching_sha2_password
localhost mysql.session $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED caching_sha2_password
localhost mysql.sys $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED caching_sha2_password

如果有的话继续下一步,没有的修改;

②Mysql的端口是否正确

Code
1
netstat -ntlp    # 查看服务器已将运行的端口  运行后是一个列表 查看MySQL的端口3306是否存在 存在继续

③查看my.cnf配置以下内容是否修改,没有修改的修改;

Code
1
2
bind-address=0.0.0.0        # 这个可以注释 或 改为0.0.0.0
# skip-external-locking # 这个注释掉

④授权:赋予任何主机上以root身份访问数据的权限

Code
1
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

刷新权限

Code
1
FLUSH PRIVILEGES;

就可以了

下面说一下Win10CMD命令远程访问数据库

Code
1
2
3
4
5
mysql -uroot -p            # 正常的访问本机的MySQL
mysql -h 'Ip' -uroot -p # Ip——>要链接的远程MySQL Ip地址
mysql -h 'Ip' -P -uroot -p # 加上端口访问
# |
# P必须是大写,不能与p相同

之后输入密码就可以连接;以上就是我在云服务器上部署MySQL所遇到的问题,希望能够帮助到你!

文章作者: Jack-Roc
文章链接: http://jack-roc.top/2018/08/15/MySQL/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jack-Roc
打赏
  • 微信
    微信
  • 支付寶
    支付寶