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;
-- 修改密码
set password for root@localhost = password('123456');
# 全库
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
这样,在备份时并不会对数据表加锁,线上业务完全不受影响,经测试,备份耗时基本不变。
mysql -uroot -p < bak.sql
# mysql命令行
mysql> source /usr/local/bak.sql