Skip to content

Latest commit

 

History

History
188 lines (151 loc) · 5.68 KB

命令行.md

File metadata and controls

188 lines (151 loc) · 5.68 KB

命令行

cd mysql安装目录/bin
mysql -uroot -p
mysql -uroot -ppassword

# 创建数据库
create database tlga_oa default character set utf8 collate utf8_general_ci;
create database tlga_eflow default character set utf8 collate utf8_general_ci;

# 版本号
mysql> select version();
mysql> select @@version;
mysql> show variables like "%version%";

Tip

在命令行中使用密码时:mysql -uroot -ppassword,如果密码中包含特殊字符,使用\进行转义:

mysql -uroot -ppas\(\!sword

mysqldump同理。

授权

查看授权

mysql> show grants for 'root'@'192.168.126.125';
+---------------------------------------------------------+
| Grants for [email protected]                         |
+---------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.126.125' |
+---------------------------------------------------------+

创建用户

新创建的用户默认没有权限

mysql> create user "haidon" identified by "123456";       -- 此时密码为123456,host值为%。
mysql> create user "haidon"@"%" identified by "123456";   -- 此时密码为123456
mysql> create user "haidon"@"192.168.126.125" identified by "123456";   -- 此时密码为123456

授权

all privileges:所有权限。 select:读取权限。 create:创建权限。 delete:删除权限。 update:更新权限。 drop:删除数据库、数据表权限。

mysql> grant all privileges on *.* to '用户名'@'指定ip' identified by '用户密码';
mysql> grant all privileges on test.test to '用户名'@'指定ip' identified by '用户密码';
mysql> grant all privileges on tornado.* to 'haidon'@'%' identified by '123456';

删除授权

mysql> revoke select on tornado.* from "haidon"@"%";
mysql> revoke all on tornado.* from "haidon"@"%";

删除用户

mysql> drop user "haidon"@"%";

刷新权限

mysql> flush privileges;

mysql实现添加用户并授权-mysql教程-PHP中文网

密码

-- 修改密码
set password for root@localhost = password('123456');

修改mysql米面_MySQL如何修改密码_是米斯呀的博客-CSDN博客

备份还原

备份

# 全库
mysqldump -uroot -p -A > bak.sql
# 仅表结构
mysqldump -uroot -p -A -d > bak.sql
# 仅表数据
mysqldump -uroot -p -A -t > bak.sql
# 单个数据库
mysqldump -uroot -p db1 > bak.sql
# 单个数据库表结构
mysqldump -uroot -p db1 -d > bak.sql
# 远端
mysqldump -h192.168.3.200 -uroot -p db1 > bak.sql
# 包含时间触发器
  -E, --events        Dump events.
# 包含函数和存储过程
  -R, --routines      Dump stored routines (functions and procedures).
# 包含创建数据库的语句,--databases同理
  -A, --all-databases Dump all the databases. This will be same as --databases
                      with all databases selected.

Tip

使用参数--all-databases进行全库备份时,

  • information_schema:不备份
  • mysql:备份
  • performance_schema:不备份

备份锁表导致卡住的问题

mysqldump -uroot -p db1 -R -E --single-transaction > /home/websvr/bak.sql

分析 备份一个库:mysqldump -hhost -uroot -ppassword dbname > /opt/backup.sql

直接使用上述语句备份数据库,存在的问题是:备份完成之前,会把所有的表锁住,导致无法写入。。

这在生产环境下是不可接受的,而且这才20+G,后续数据库Size会越来越大,备份的时间必然也越长。。

那么,有没有一种方法在完成备份的同时并不锁定表呢??往下看。

解决 在使用mysqldump备份时,加一个参数:--single-transaction,这样,便可以在备份库的时候并不锁定数据表。

mysqldump -hhost -uroot -ppassword --single-transaction dbname > /opt/backup.sql

原理说明:

Some internals on how this actually works - before the utility starts fetching data from the server, it sends it a START TRANSACTION command. This command serves few goals in this case. The first one, is to have a consistent backup created, from a specific point in time, regardless of changes that occur after the backup started. The second goal is to prevent those locks from happening, as we are performing our actions as part of a database transaction.

[!NOTE] 仅对支持事务的表有效,比如InnoDB,对非事务型的表比如MyISAM则没有效果。

另外需要注意的是,当使用--single-transaction这个参数备份大型数据库时,可考虑和--quick参数结合使用。--quick可以让mysqldump在备份的过程中每次只取一行数据,而不是把所有行都缓存到内存里,这主要考虑了服务器内存限制,以防备份失败。

mysqldump -hhost -uroot -ppassword --single-transaction --quick dbname > /opt/backup.sql

这样,在备份时并不会对数据表加锁,线上业务完全不受影响,经测试,备份耗时基本不变。

mysqldump备份时导致所有数据表锁定,无法提供服务_mysqldump 锁表-CSDN博客

mysqldump引发数据库不可读写的血案 - 知乎 (zhihu.com)

还原

mysql -uroot -p < bak.sql
# mysql命令行
mysql> source /usr/local/bak.sql

MySQL定时备份数据库(全库备份) - letcafe - 博客园 (cnblogs.com)