编程崽

登录

一叶在编程苦海沉沦的扁舟之上,我是那只激情自射的崽

Mysql 的安装和使用

Mysql 的安装和使用

常用命令

查看所有指令: service mysql | /etc/init.d/mysql
启动: service mysql start | /etc/init.d/mysql start
关闭: service mysql stop | /etc/init.d/mysql stop
重启: service mysql restart | /etc/init.d/mysql restart

安装和卸载

Linux 的 CentOS

使用 apt-get

sh 复制代码
apt-get install mysql-server

Mac 安装

下载对应mySql,下载官方mySql

我现在的电脑是Mac,所以可以下载以下两个版本:

  • macOS 10.15 (x86, 64-bit), DMG Archive(dmg可视化窗口安装文件)
  • macOS 10.15 (x86, 64-bit), Compressed TAR Archive(指令安装)

Mac 卸载

Mac电脑安装数据库后,是可以在系统偏好设置窗口最下面,看到mySql标识的。

先停止所有mysql有关进程,然后依次执行下面的指令:

sh 复制代码
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*

vim /etc/hostconfig  # 打开之后,修改 removed the line MYSQLCOM=-YES-

rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*

执行完毕后,系统偏好设置窗口的mySql标识消失,可以重新安装其他mySql了。

刚安装完成的初始化

Ubuntu系统使用apt-get安装的mysql,没有提示让用户设置账户名和密码,而是提供了一个默认的账户名和密码,这里我们需要自己去查看、登录并创建新用户。

sh 复制代码
# 查看默认用户名和密码
cat /etc/mysql/debian.cnf

# 输出以下
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = debian-sys-maint
password = 7Vz2AGk0rl1Hpbdk
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = debian-sys-maint
password = 7Vz2AGk0rl1Hpbdk
socket   = /var/run/mysqld/mysqld.sock

所以,在我的机器上:

  • 默认用户:debian-sys-maint
  • 默认密码:7Vz2AGk0rl1Hpbdk

登录默认账户

sh 复制代码
# 登录进mysql:mysql -u账户名 -p密码
mysql -udebian-sys-maint -p7Vz2AGk0rl1Hpbdk

# 查看当前用户
SELECT User, Host, plugin FROM mysql.user;

# 展示当前所有的现有的数据库名字
show databases;

# 输出
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

# 声明要操作 mysql 这个库
use mysql;

# 给root用户设置密码
update user set authentication_string=PASSWORD("自定义密码") where user = "root";

# 设置用户的 plugin
update user set plugin="mysql_native_password";

# 更新
flush privileges;

使用quit;退出mysql,再登陆就可以新用户名新的密码了。

基本使用

使用Navicat连接数据库

使用Navicat正常的新建连接,填写了关键的主机、端口、用户名(数据库的用户名)、密码(数据库的密码)后,进行连接测试。

可能出现的弹框报错一:

2003 - Can't connect to MySQL server on '39.96.68.33' (61 "Connection refused")

原因一:mysql未启动。

直接此教程顶部的启动命令启动就可以了。

原因二:服务的防火墙的原因,我们需要开发3306这个mysql默认使用的端口,让外部能访问。

我这里使用的是阿里云ECS,过程如下:

  • 登录阿里云ECS控制台
  • 点击左上角,展开侧边栏菜单,选择云服务ECS
  • 菜单栏中选择【网络与安全】 - 【安全组】
  • 右侧会展示你的的安全组列表,基本就是你和你的ECS服务器对应
  • 找到mysql的那个服务器所对应的那一条安全组,点击其最右侧的【配置规则】
  • 打开的新页面,会展示这个安全组所配置一些允许通行的端口号和描述
  • 如果配置的通行端口号中有3306,那就不是防火墙的问题了,到此为止,否则继续
  • 选择列表上面的快速添加,出现弹框,直接弹框中的多选中的【MySQL(3306)】勾上,点击确定即可。
sh 复制代码
# 输出查看3306端口是否开放
netstat -an|grep 3306

# 输出以下类似的打印,说明已开放成功了
tcp6       0      0 :::3306                 :::*                    LISTEN     
tcp6       0      0 172.17.222.56:3306      221.222.30.146:62792    TIME_WAIT  

原因三:mysql配置原因,只允许本地或某个ip访问

sh 复制代码
# 输出查看3306端口信息,能看到端口的访问限制
netstat -an|grep 3306

# 输出以下,说明限制只允许 127.0.0.1 访问
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN   

需要先修改mysql配置:

sh 复制代码
# 使用 apt 安装的mysql,是下面这个配置文件,其他的安装方式需要自己找对应配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 从文件中找到一下代码:
...
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address          = 127.0.0.1
...

# 把 bind-address = 127.0.0.1 这一行注释掉,然后 输入:wq 回车,来保存并退出

然后进入mysql中,执行以下指令:

sh 复制代码
# 对远程用户进行授权
grant all privileges on *.* to 'root'@'%' identified by 'mysqlma';

# 退出mysql
eqit;

# 退出到系统命令行,输入一下命令,重启一下mysql
service mysql restart

操作完成后,就可以再次连接来测试了。

可能出现的弹框报错二:

sh 复制代码
1130 - Host '221.222.30.146' is not allowed to connect to this MySQL server

这是因为Navicat使用的mysql账户,并没有开放远程访问权限,需要去服务开启权限:

sh 复制代码
# 登录mysql
mysql -uroot -p123456

# 允许使用root账户远程登录mysql
update mysql.user set host = '%' where user ='root' limit 1;

# 更新配置
flush privileges;

# 退出登录
quit;

# 重启mysql
service mysql restart

完成。

执行.sql文件

如果.sql文件的指令集合中,包含 use {数据库名} 的指令,可能会导致执行到指令的其他数据库中。

方法一: 一行指令执行

sh 复制代码
# mysql -u{账户} -p{密码} -D{执行到的数据库名} < {导出到带路径的文件名}
# 比如
mysql -udebian-sys-maint -p7Vz2AGk0rl1Hpbdk -Ddoctest < ~/doctest.sql 

方法二: 先使用指令登录到 mysql 中,然后:

sh 复制代码
# 切换到需要执行 sql 文件的数据库
use account_table;

# 执行 .sql 文件
source ~/account_table.sql

# 正常情况,完成

执行.sql文件时报错

在使用 Navicat,或者直接使用指令使用 .sql 文件时,可能会报错。

使用 Navicat 时报的错不明所以,但使用指令时报错如下:

sh 复制代码
ERROR 1231 (42000): Variable ‘time_zone’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘sql_mode’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘foreign_key_checks’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘unique_checks’ can’t be set to the value of ‘NULL’
ERROR 1231 (42000): Variable ‘character_set_client’ can’t be set to the value of ‘NULL’
Query OK, 0 rows affected (0.00 sec)

原因是 mysql 配置中的最大允许数据包 max_allowed_packet 的值过小,此值默认为16M,最大为1G。

临时修改方案: 使用指令进入到 mysql 程序中,执行 set global max_allowed_packet = 200M; 来修改,但重启 mysql 后,此值会恢复。

永久解决方案: 去修改 mysql 的配置文件并重启 mysql 即可。

可以使用以下指令来查找 mysql 的配置文件位置:

sh 复制代码
mysql --help | grep my.cnf

筛选出来的文件,可能还会引入其他位置的配置文件,我的配置文件最终文件为 /etc/mysql/mysql.conf.d/mysqld.cnf,修改里面的 max_allowed_packet 这一项的值。

保存文件后重启 mysql,再执行 sql 文件就不会报错了。

常用指令

sh 复制代码
# 登录进mysql:mysql -u{账户名} -p{密码},比如:
mysql -udebian-sys-maint -p7Vz2AGk0rl1Hpbdk

# 退出登录
quit;

# 查看mysql使用的时区
show variables like '%time_zone%';

# 查看 mysql 系统时间
select now();

# 设置时区,更改为东八区
set global time_zone = '+8:00';

# 导出数据库到文件,格式和样例如下
# mysqldump -u{用户名} -p{密码} {库名} > {导出到带路径的文件名}
mysqldump -uroot -p123456 doctest > ~/doctest.sql

# 更新配置
flush privileges;