常用命令
查看所有指令: 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
使用 apt-get
apt-get install mysql-server
下载对应mySql,下载官方mySql
我现在的电脑是Mac,所以可以下载以下两个版本:
macOS 10.15 (x86, 64-bit), DMG Archive
(dmg可视化窗口安装文件)macOS 10.15 (x86, 64-bit), Compressed TAR Archive
(指令安装)Mac电脑安装数据库后,是可以在系统偏好设置窗口最下面,看到mySql标识的。
先停止所有mysql有关进程,然后依次执行下面的指令:
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,没有提示让用户设置账户名和密码,而是提供了一个默认的账户名和密码,这里我们需要自己去查看、登录并创建新用户。
# 查看默认用户名和密码
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
登录默认账户
# 登录进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,过程如下:
# 输出查看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访问
# 输出查看3306端口信息,能看到端口的访问限制
netstat -an|grep 3306
# 输出以下,说明限制只允许 127.0.0.1 访问
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
需要先修改mysql配置:
# 使用 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中,执行以下指令:
# 对远程用户进行授权
grant all privileges on *.* to 'root'@'%' identified by 'mysqlma';
# 退出mysql
eqit;
# 退出到系统命令行,输入一下命令,重启一下mysql
service mysql restart
操作完成后,就可以再次连接来测试了。
可能出现的弹框报错二:
1130 - Host '221.222.30.146' is not allowed to connect to this MySQL server
这是因为Navicat
使用的mysql账户,并没有开放远程访问权限,需要去服务开启权限:
# 登录mysql
mysql -uroot -p123456
# 允许使用root账户远程登录mysql
update mysql.user set host = '%' where user ='root' limit 1;
# 更新配置
flush privileges;
# 退出登录
quit;
# 重启mysql
service mysql restart
完成。
如果.sql文件的指令集合中,包含
use {数据库名}
的指令,可能会导致执行到指令的其他数据库中。
方法一: 一行指令执行
# mysql -u{账户} -p{密码} -D{执行到的数据库名} < {导出到带路径的文件名}
# 比如
mysql -udebian-sys-maint -p7Vz2AGk0rl1Hpbdk -Ddoctest < ~/doctest.sql
方法二: 先使用指令登录到 mysql 中,然后:
# 切换到需要执行 sql 文件的数据库
use account_table;
# 执行 .sql 文件
source ~/account_table.sql
# 正常情况,完成
在使用 Navicat,或者直接使用指令使用 .sql 文件时,可能会报错。
使用 Navicat 时报的错不明所以,但使用指令时报错如下:
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 的配置文件位置:
mysql --help | grep my.cnf
筛选出来的文件,可能还会引入其他位置的配置文件,我的配置文件最终文件为 /etc/mysql/mysql.conf.d/mysqld.cnf
,修改里面的 max_allowed_packet 这一项的值。
保存文件后重启 mysql,再执行 sql 文件就不会报错了。
# 登录进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;