mysql常规操作

备份和还原表结构

备份

mysqldump -u root -p table >name.sql

还原

mysql -u abc -p table < name.sql

创建mysql用户并且分配权限

https://www.cnblogs.com/cyl048/p/7992376.html

grant all privileges on wanpi.* to 'user'@'%' identified by 'password';

mycli

一个支持自动补全和语法高亮的 MySQL/MariaDB 客户端

pip install mycli

安装pip

yum install pip

// 如果失败或者安装不成功,请使以下方法
sudo yum -y install epel-release
sudo yum -y install python-pip
$ mycli -u root -h localhost
Password:
Version: 1.16.0
Chat: https://gitter.im/dbcli/mycli
Mail: https://groups.google.com/forum/#!forum/mycli-users
Home: http://mycli.net
Thanks to the contributor - Open Query Pty Ltd
mysql root@localhost:(none)> use blog;
                                 use
                                 user
                                 use

错误

Cannot uninstall 'configobj'. It is a distutils installed...

Cannot uninstall 'configobj'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

sudo pip install mycli --ignore-installed configobj 

navicat通过ssh连接数据库

这里通过ssh连接数据库,可以不用开放3306端口,安全方面会好很多

编辑连接->常规

  • 连接名: 这里是这个连接的名称,可以随意写
  • 主机: 由于这里是ssh连接的,写localhost
  • 端口: 3306
  • 编辑密码: 这里写数据库的密码

编辑连接->ssh

  • 主机:服务器IP
  • 端口:22
  • 用户名: ssh登录用户名
  • 密码类型:这里可以用私钥,也可以用密码
  • 编辑密码:ssh登录密码

测试连接

以上都填写完成之后,就点测试连接。。

1045 - Access denied for user 'root'@'localhost' (using password: YES)

出现这个说明连接不上数据库

参考文章

mysql 找回root密码,同样适用于Percona

停止MySQL服务

kill `cat /var/run/mysqld/mysqld.pid`
pkill mysqld

使用--skip-grant-tables --skip-networking选项启动MySQL服务

mysqld --skip-grant-tables --skip-networking --user=mysql
  • --skip-grant-tables:跳过授权表认证
  • --skip-networking:加了跳过授权表选项后所有的人都可以无密码登录,这是很不安全的,此选项不监听网络,防止恶意登录。

无密码连接MySQL

mysql

重置密码

mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

停止MySQL服务并正常启动

kill `cat /var/run/mysqld/mysqld.pid`
systemctl restart mysql.service

ubuntu 下 重置 mariadb root密码

kill pid

sudo kill `sudo cat /var/run/mysqld/mysqld.pid`

修改密码

mysqld_safe --skip-grant-tables
use mysql;
UPDATE user SET password=password('newpassword') WHERE user='root'; 
flush privileges; 
exit; 

重启mysql

参考文章

获取一个表的所有列的值,并逗号隔开

如果你使用laravel框架,那么你会发现如果表中字段一多.手动写$fillable这个属性很烦,所有就直接从数据库查询出来,复制粘贴...

SELECT GROUP_CONCAT(COLUMN_NAME SEPARATOR ",") FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name'

telnet mysql 失败

EHost '172.17.0.1' is not allowed to connect to this MariaDB serverConnection closed by foreign host.

grant all privileges on *.* to 'root'@'%' identified by '123456';
flush privileges;

mysql用户授权

查看有哪些用户

select user,host from mysql.user;
+--------+-----------+
| user   | host      |
+--------+-----------+
| root   | %         |
| aaa | %         |
| root   | localhost |
| aaa | localhost |
+--------+-----------+

增加aaa用户权限

让aaa用户本地使用aaa密码通过localhost访问所有数据库

grant all privileges on *.* to 'aaa'@'localhost' identified by 'aaa';