ubuntu mysql 安全_听说你要在 Ubuntu 上安装 MySQL ?踩坑了吧。

本文详细介绍了在Ubuntu上安装MySQL的过程,包括检查安装状态、安全模式登录以修改初始密码,以及设置允许远程访问的步骤。此外,还解决了创建表时datetime默认值引发的错误,并提供了调整SQL_MODE的解决方案。
摘要由CSDN通过智能技术生成

Ubuntu 安装 MySQL 密码初始化问题

1、安装

$ sudo apt-get install mysql-server

$ sudo apt-get install mysql-client

$ sudo apt-get install libmysqlclient-dev

以此在终端输入上述代码,等待安装。装好后,输入以下代码检查下是否安装成功。

$ sudo netstat -tap | grep mysql

$ netstat -tap | grep mysql

tcp6 0 0 [::]:mysql [::]:* LISTEN 7510/mysqld12345

如果出现第三行提示,则表明安装成功。

2、登入MySQL

$ mysql -u root -p

输入密码,如果可以进入则下面的不用看了;如果提示不能登入,则我们尝试启用安全模式登入MySQL,这样可以绕过密码登入,登入后再修改密码。

3、安全模式登入MySQL

$ sudo /etc/init.d/mysql stop

-------------------------------------

[sudo] wl 的密码:

[ ok ] Stopping mysql (via systemctl): mysql.service.

$ sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking

输入第一行终止MySQL运行,成功,会提示下面两行;输入第四行,成功,没有任何报错则可以另外打开一个终端窗口进行下一步操作;但是一般会报错,比如提示mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists

因此我们尝试输入以下代码

$ sudo mkdir -p /var/run/mysqld

$ sudo chown mysql:mysql /var/run/mysqld

最后再次输入:

sudo /usr/bin/mysqld_safe --skip-grant-tables --skip-networking

到了这里不在提示错误,可以打开另一个终端端口了,尝试无密码登入MySQL。

mysql -u root

到这里应该可以进入MySQL了,继续操作

> use mysql;

> update user set authentication_string=PASSWORD("这里输入你要改的密码") where User='root'; #更改密码

> update user set plugin="mysql_native_password"; #如果没这一行可能也会报一个错误,因此需要运行这一行

> flush privileges; #更新所有操作权限

> quit;

4、使用修改的密码登入MySQL

经过上面一系列的操作,应该可以正常使用你更改的密码登入了。

$ sudo /etc/init.d/mysql stop

$ sudo /etc/init.d/mysql start # reset mysql

$ mysql -u root -p

第一行先终止数据库运行,第二行重启数据库服务,第三行root用户登入。

设置mysql允许远程访问

第一步:

在使apt-get install mysqlserver 默认安装 mysql 的情况下需要修改

$ vim /etc/mysql/my.cnf

找到 bind-address = 127.0.0.1

(或者文件在 /etc/mysql/mysql.conf.d/mysqld.cnf )

注释掉这行,如:#bind-address = 127.0.0.1

或者改为: bind-address = 0.0.0.0

允许任意IP访问;

或者自己指定一个IP地址。

重启 MySQL:

$ sudo service mysql restart

第二步:

授权用户能进行远程连接

> grant all privileges on *.* to root@"%" identified by "password" with grant option;

> flush privileges;

第一行命令解释如下,.:第一个代表数据库名;第二个代表表名。这里的意思是所有数据库里的所有表都授权给用户。root:授予root账号。“%”:表示授权的用户IP可以指定,这里代表任意的IP地址都能访问MySQL数据库。“password”:分配账号对应的密码,这里密码自己替换成你的mysql root帐号密码。

第二行命令是刷新权限信息,也即是让我们所作的设置马上生效。

MySQL中 datetime 默认值问题

在使用 MySQL 时当建表语句中有以下语句时(该问题是我在使用 GORM 时遇到的):

> create_time DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'

则会出现以下的异常:

Invalid default value for ‘create_time’

这是由于 SQL_MODE 的问题没设置好,方案如下:

方案一:

查询当前数据库的 SQL_MODE

输入:

select @@sql_mode

得到以下结果:

ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

可以看到 NO_ZERO_IN_DATE,NO_ZERO_DATE 是 DATE 不能全部为 0 的原因.

所以把模式中的 NO_ZERO_IN_DATE,NO_ZERO_DATE 去掉就可

SET [SESSION|GLOBAL] sql_mode=’modes’下:

SET GLOBAL sql_mode=’ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’

其中:SESSION只在当前会话中生效,GLOBAL为全局生效。

方案二:

改 mysql 模式

修改my.cnf文件,在 [mysqld] 中添加

sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重启mysql

方案三:

把语句改为以下就可以执行创建表

create_time DATETIME NOT NULL DEFAULT '0000-01-01 00:00:00';

查错

如果在配置过程中遇到问题可以使用下面的命令查看错误

$ tail -30 /var/log/mysql/error.log

$ ps aux |grep mysql*

本作品采用《CC 协议》,转载必须注明作者和本文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值