初始化mysql数据库

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

无论你是编译安装,二进制安装,还是yum,rpm,装完mysql都是要初始化才能用.

下面来介绍下初始化安装mysql,切记安装前要准备好my.cnf文件~!怎么配置my.cnf,可以看我另一篇文章,有很多人为了照顾初学者,直接跳过my.cnf的配置说明,我觉得是不合理的,数据库不是能用就好,是需要理解自己定义的好处和意义,真心建议大家先看那篇文章,找到自己想要的.

不过要注意的是,发行版和版本号的不同,有些参数会不同或不可用,会导致初始化失败,这时需要去初始化的数据目录查看mysql.err,看看那个参数有问题,然后屏蔽了,重新再初始化一次.

-前置步骤(已做就可以不用理会)

1
2
3
4
5
6
7
8
9
10
11
12
13
#创建数据目录
mkdir  -p  /data/mysql/data
#建立mysql用户组,并更改权限
groupadd mysql
useradd  -g mysql -s  /sbin/nologin  mysql
chown  -R mysql.mysql  /data/mysql/data
mkdir  /data/mysql/tmp
chown  -R mysql.mysql  /data/mysql/tmp/
#拷贝服务启动文件,yum和rpm安装的可以不需要
cp  -ar  /usr/local/mysql/support-files/mysql .server  /etc/init .d /mysql
#编辑my.cnf,可以看我另一篇文章来参考具体怎么设置,也可以用模板文件
cp  -ar  /usr/local/mysql/support-files/my-default .cnf  /usr/local/mysql/my .cnf
vim  /usr/local/mysql/my .cnf

-注意:操作前要确保没有其他mysql发行版干扰,特别是yum安装的和rpm安装,

1
2
3
4
5
6
#查看已安装的rpm包中又没有mysql和mariadb的安装包
rpm -qa | grep  -E  'mysql|mariadb'
mariadb-libs-5.5.44-2.el7.centos.x86_64
#删除查找出来的rpm安装包
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64
rpm -e --nodeps mysql.x86_64

额外说明:--nodeps是不检查依赖,不要害怕,即使有依赖你自己的安装包都肯定有,做软连接就好了

1
ln  -s  /usr/local/mysql/lib/libmysqlclient .so.20  /usr/lib64/libmysqlclient .so.18

要额外注意一个事情,如果存在~/.my.cnf和~/.mylogin.cnf,是默认先使用这个cnf配置文件的,并且是~/.my.cnf优先,就算你放到程序目录并用--defaults-file选项指定配置文件,都是会优先走这里,不走你指定的。不过,一般情况下是不会出现这种情况,系统也不会默认把文件放进这里,所以出现这种奇葩情况,基本上只会是人为原因。


-------------------------这条分割线上面的无论是什么版本都要做~!--------------------------

-5.6及之前的版本初始化步骤(包括5.6)

确保mysql进程已停

1
service mysql stop

确保初始化的数据目录没有数据,由my.cnf定义的数据目录

1
rm  -rf  /data/mysql/data/ *

执行初始化脚本,添加参数,切记要先编辑好my.cnf

1
/usr/local/mysql/scripts/mysql_install_db  --defaults- file = /usr/local/mysql/my .cnf --basedir= /usr/local/mysql/  --datadir= /data/mysql/data  --user=mysql >  /dev/null  2>&1

启动mysql

1
service mysql start

初始化密码

1
/usr/local/mysql/bin/mysqladmin  -u root password  '新密码'

#初始化完成,尝试登陆

1
/usr/local/mysql/bin/mysql  -uroot  -p '新密码'


------------------------------我是分割线---------------------------------

-5.7之后用新方式初始化

确保mysql进程已停

1
service mysql stop

确保初始化的数据目录没有数据,由my.cnf定义的数据目录

1
rm  -rf  /data/mysql/data/ *

执行初始化命令,指定defaults-file且并必须放到最前面,切记要先编辑好my.cnf

1
mysqld --defaults- file = /usr/local/mysql/my .cnf --initialize

5.7的初始化采用了新的模式,虽然繁琐一些,但是也更安全.

程序会自动生成密码,不用这个密码你就不能登录,除非你进安全模式破密码.

或者把参数--initialize换成--initialize-insecure,初始化后可以免密码登录,这里不细说,各位可以慢慢测试.

查看初始化后的密码(密码信息在行的最后)的方法,

密码记录在数据目录的mysql.err里面,假设我的数据目录定义是/data/mysql/data,所以密码就应该是记录在/data/mysql/data/mysql.err里面,我直接截取出来看了.

1
2
sed  -n  '/password/p'  /data/mysql/data/mysql .err
.....A temporary password is generated  for  root@localhost: GVedtgXDZ1-,

更改一下数据目录的属主权限,这种初始化方式并没有改这个属主问题,但是不改的话会启动不了

1
chown  -R mysql:mysql  /data/mysql/data/

启动mysql

1
service mysql start

密码还要初始化,虽然初始化数据库的时候已经有密码,可以直接登录,但是初始化还没真正完成,不然会报错,不断提示你改密码

1
mysql -uroot -p 'GVedtgXDZ1-,'

由于5.7之后,系统用户表有变化,直接用password是不行的,所以必须是下面的方法来这样改,不然改不了

1
2
3
4
mysql> alter user  'root' @ 'localhost'  identified by  '123' ;
mysql>  set  password  for  'root' @ 'localhost' =password( '123' );
mysql> update mysql.user  set  authentication_string=password( '123' ) where user= 'root'  and Host =  'localhost' ;
mysql> flush privileges;

这时候才算初始化完成,尝试你设定的新密码登录吧

1
mysql -uroot -p '123'


-扩展阅读:mysql 5.7增加了两个字段password_last_changed、password_lifetime来完善安全策略,可以设置参数default_password_lifetime来延长使用期限

1
2
3
ALTER USER  'root' @ 'localhost'  PASSWORD EXPIRE INTERVAL 90 DAYS;
ALTER USER  'root' @ 'localhost'  PASSWORD EXPIRE NEVER;
ALTER USER  'root' @ 'localhost'  PASSWORD EXPIRE DEFAULT;


---------------------------------我也是分割线-----------------------------------

-安全加固.

安全加固mysql数据库(初始化后做最佳)

-5.6,5.7通用加固方式

1.删除任何无关的管理员用户和空密码的管理员用户,有需求再开

1
2
3
4
mysql> delete from mysql.user where user= "root"  and host!= "localhost" ;
#在5.6的旧环境下,可能存在空密码的用户,这显然不被允许,5.7则没有这种用户,可以不做
mysql> delete from mysql.user where user= "root"  and password= "" ;
mysql> flush privileges;

2.删除test库(5.7没了),因为这个库默认是所有人都有权限读写,存在漏洞

1
mysql> drop database  test ;

3.删除存放数据库的表信息,因为本来就还没有数据库信息,万一被注入就不好了。

1
mysql> delete from mysql.db;

4.SSL加密设置,用途就是把数据加密,防止被截取后破解,5.6要加ssl指定文件位置配置,5.7自动开,然后执行命令就可以了.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#执行命令,在数据目录创建key文件,下面这个命令是封装了整个创建过程,就不用做那么多复杂的事了
#不过这个命令文件是5.7新加入的,5.6中没有这个命令文件,但是可以放到在5.6上面用,还算方便.
/usr/local/mysql/bin/mysql_ssl_rsa_setup  --datadir= /data/mysql/data/
#然后看看开启了没有
mysql>SHOW VARIABLES LIKE  'have_ssl' ;  
| have_ssl          | YES     |  
#进入mysql,授权ssl专用用户
mysql> grant all privileges on *.* to  'sslroot' @ '%'  identified by  '123123'  require ssl;
#用ssl专用用户登录
mysql -usslroot -p '123123'  -h127.0.0.1
#查看当前状态,SSL已启用
mysql> \s
Current user:        sslroot@127.0.0.1
SSL:            Cipher  in  use is ECDHE-RSA-AES128-GCM-SHA256

不过开启SSL需要谨慎,因为数据进行了加密处理,毫无疑问服务器需要消耗资源来校验密文,官方说明可能会下降25%的性能,还是比较高的.

对于高并发的环境自然是性能下降明显,除非安全要求非常高,不然不建议开,一般来说只要授权限制访问IP是内网的就已经可以解决安全问题.







     本文转自arthur376 51CTO博客,原文链接:http://blog.51cto.com/arthur376/1840353,如需转载请自行联系原作者



相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
4月前
|
Ubuntu 关系型数据库 MySQL
mysql8.0安装初始化不需要设定root密码?
uubntu 的mysql安装完成后无法设定root密码
312 10
|
10月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第16天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括配置系统源、安装 SQL Server 2019 软件包以及数据库初始化,确保 SQL Server 正常运行。
488 4
|
10月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
428 1
|
10月前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
357 1
|
11月前
|
数据库连接 数据库 数据安全/隐私保护
网站初始化数据库错误
网站初始化数据库错误
|
安全 Java 关系型数据库
Java连接Mysql SSL初始化失败
Java连接Mysql SSL初始化失败
|
11月前
|
SQL Shell 数据库
在TDengine容器中创建初始化数据库的Shell命令实例
以上就是在Docker容器环境中部署并初始化TDengine数据库的全过程,希望对你有所帮助。
370 0
|
SQL 关系型数据库 MySQL
mysql密码的初始化,修改与重置
【8月更文挑战第16天】在 MySQL 中,可通过特定步骤初始化、修改或重置密码: 1. **初始化密码**:适合首次安装或遗忘 root 密码。需先停用 MySQL 服务,以特殊模式启动(跳过权限表),登录后更新 root 用户密码,并重启服务。 2. **修改密码**:直接使用 `ALTER USER` SQL 语句或通过客户端工具如 MySQL Workbench 修改现有用户的密码。 3. **重置密码**:若遗忘密码且初始化方法不可行,则需停用服务、修改配置文件以允许无密码启动 MySQL,登录后更改密码,并恢复正常配置重启服务。
3634 2
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
存储 Serverless API
Serverless 架构实现弹幕场景问题之在initializer方法中初始化数据库实例如何解决
Serverless 架构实现弹幕场景问题之在initializer方法中初始化数据库实例如何解决
112 0

推荐镜像

更多