Mysql常用指令.md

简书迁移

Posted by thrfox on June 29, 2020

mysql -u[username] -p[password] -h[host] 登录数据库 (参数后可不带空格) mysql -uroot -pPa$$w0rd -hlocalhost use [database_name]; 切换数据库 show databases; 查看所有数据库 show tables; 查看数据库中所有表 flush privileges; 刷新权限

更改密码

1
2
3
4
5
6
--8.0+版本
ALTER USER "[用户名]"@"[IP]" IDENTIFIED  BY "new_password";
ALTER USER "root"@"localhost" IDENTIFIED  BY "Pa$$w0rd";
--5.0+版本
update user set password=password("这里填写要设置的密码") where user="root";
--更改密码后需要刷新权限

quit; 退出mysql模式

创建用户

1
2
3
4
5
6
7
8
--创建用户(user1:用户名;%:任意ip,也可以指定,root默认就是localhost;123456:登录密码)
CREATE USER 'user1'@'%' IDENTIFIED BY '123456';

--授权,默认创建的用户权限是usage,就是无权限,只能登录而已,
--all:所有权限,这里有select,update等等权限,可以去搜一下;后面的*.*:指定数据库.指定表,这里是所有;to后面就是你刚才创建的用户
grant all on *.* to 'user1'@'%'
--注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令: 
GRANT all ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION; 

8.0+版本中,客户端连接错误caching-sha2-password

原因是8+版本中使用了新的加密规则,而客户端还未支持

1
2
3
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; --禁用密码过期策略
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; --使用 mysql_native_password策略更改密码
FLUSH PRIVILEGES; #刷新权限 

备份数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#导出某个数据库--结构+数据
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt db_name |gzip -9 > /db_bakup/db_name.gz
 
#导出某个数据库的表--结构+数据+函数+存储过程
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt -R db_name | gzip -9 > /db_backup/db_name.gz
 
#导出多个数据库
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt --databases db_name1 db_name2 db_name3 |gzip -9 > /db_backup/mul_db.gz 
 
#导出所有的数据库
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt --all-databases |gzip -9 > /db_bak/all_db.gz
 
#导出某个数据库的结构
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt --no-data db_name|gzip -9 > /db_bak/db_name.strcut.gz
 
#导出某个数据库的数据
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt --no-create-info db_name|gzip -9 > /db_bak/db_naem.data.gz
 
#导出某个数据库的某张表
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt db_name tbl_name |gzip -9 > /db_bak/db_name.tal_name.gz
 
# 导出某个数据库的某张表的结构
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt --no-data db_name tal_name | gzip -9 > /db_bak/db_name.tal_name.struct.gz
 
#导出某个数据库的某张表的数据
shell>mysqldump -h127.0.0.1 -uroot -pxxxxxx --opt --no-create-info db_name tbl_name | gzip -9 > /db_bak/db_name.tbl_name.data.gz
 
##--opt==--add-drop-table + --add-locks + --create-options + --disables-keys + --extended-insert + --lock-tables + --quick + --set+charset
##默认使用--opt,--skip-opt禁用--opt参数

#还原指定数据库
gunzip < test.gz |mysql -hlocalhost -uroot -pxxxxx dbname
# 若数据打开了binlog会报错This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
# 此时在数据库执行set global log_bin_trust_function_creators=TRUE  , 或者加在配置文件里

备份指定数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash -x
#
HOST=localhost # 主机名
PORT=3306 # 端口
USER=root # 用户名
PASSWORD= # 密码
DBS=ALL
#DBS=("dbname1" "dbname2" "dbname3") # 数据库名, ALL为所有数据库, 用数组分割()

MYSQL=`which mysql`
MYSQLDUMP=`which mysqldump`

DATE=`date +%Y%m%d%H`


BACKUP_PATH=$(cd `dirname $0`; pwd)
BACKUP_DIR="$BACKUP_PATH/backup/"
mkdir -p $BACKUP_DIR


if [ "ALL" ==  $DBS ]; then
  echo "IS NULL"
  # 查看mysql里面所有数据库名
  command="show databases"
  declare DBS=`$MYSQL -h${HOST} -P${PORT} -u${USER} -p${PASSWORD} -e "${command}"`
else
  echo "NOT NULL"
fi

for DB_NAME in ${DBS[@]}
do
        if [ "$DB_NAME" != "information_schema" ] && [ "$DB_NAME" != "mysql" ] && [ "$DB_NAME" != "performance_schema" ] && [ "$DB_NAME" != "Database" ]
        then
        BACKUP_NAME=$BACKUP_DIR/$DB_NAME.dump_$DATE
        echo "backup $DB_NAME in $BACKUP_NAME ..."

        # mysqldump出每个数据库的备份,并压缩
        $MYSQLDUMP --opt -R -h${HOST} -P${PORT} -u${USER} -p${PASSWORD} $DB_NAME | gzip > $BACKUP_NAME.sql.gz
        fi
done

#还原用 gunzip < test.gz |mysql -hlocalhost -uroot -pxxxxx dbname