常用操作
自增表
create table oldBoy (id INTEGER PRIMARY KEY AUTO_INCREMENT, name CHAR(30) NOT NULL, age integer , sex CHAR(15) ); # 创建自增表 insert into oldBoy(name,age,sex) values(%s,%s,%s) # 自增插入数据
登录mysql的命令
格式: mysql -h 主机地址 -u 用户名 -p 用户密码
mysql -h110.110.110.110 -P3306 -uroot -p mysql -uroot -p -S /data1/mysql5/data/mysql.sock -A --default-character-set=GBK
shell执行mysql命令
mysql -u$username -p$passwd -h$dbhost -P$dbport -A -e "
use $dbname; delete from data where date=('$date1'); " # 执行多条mysql命令 mysql -uroot -p -S mysql.sock -e "use db;alter table gift add column accountid int(11) NOT NULL;flush privileges;" # 不登陆mysql插入字段
备份数据库
mysqldump -h host -u root -p --default-character-set=utf8 dbname >dbname_backup.sql # 不包括库名,还原需先创建库,在use mysqldump -h host -u root -p --database --default-character-set=utf8 dbname >dbname_backup.sql # 包括库名,还原不需要创建库 /bin/mysqlhotcopy -u root -p # mysqlhotcopy只能备份MyISAM引擎 mysqldump -u root -p -S mysql.sock --default-character-set=utf8 dbname table1 table2 > /data/db.sql # 备份表 mysqldump -uroot -p123 -d database > database.sql # 备份数据库结构
innobackupex --user=root --password="" --defaults-file=/data/mysql5/data/my_3306.cnf --socket=/data/mysql5/data/mysql.sock --slave-info --stream=tar --tmpdir=/data/dbbackup/temp /data/dbbackup/ 2>/data/dbbackup/dbbackup.log | gzip 1>/data/dbbackup/db50.tar.gz # xtrabackup备份需单独安装软件 优点: 速度快,压力小,可直接恢复主从复制
还原数据库
mysql -h host -u root -p dbname < dbname_backup.sql
source 路径.sql # 登陆mysql后还原sql文件
赋权限
指定IP: $IP 本机: localhost 所有IP地址: % # 通常指定多条
grant all on zabbix.* to user@"$IP"; # 对现有账号赋予权限 grant select on database.* to user@"%" Identified by "passwd"; # 赋予查询权限(没有用户,直接创建) grant all privileges on database.* to user@"$IP" identified by 'passwd'; # 赋予指定IP指定用户所有权限(不允许对当前库给其他用户赋权限) grant all privileges on database.* to user@"localhost" identified by 'passwd' with grant option; # 赋予本机指定用户所有权限(允许对当前库给其他用户赋权限) grant select, insert, update, delete on database.* to user@'ip'identified by "passwd"; # 开放管理操作指令 revoke all on . from user@localhost; # 回收权限
更改密码
update user set password=password('passwd') where user='root' mysqladmin -u root password 'xuesong'
mysql忘记密码后重置
cd /data/mysql5 /data/mysql5/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking & update user set password=password('123123') where user='root';
mysql主从复制失败恢复
slave stop; reset slave; change master to master_host='10.10.10.110',master_port=3306,master_user='repl',master_password='repl',master_log_file='master-bin.000010',master_log_pos=107,master_connect_retry=60; slave start;
检测mysql主从复制延迟{
1、在从库定时执行更新主库中的一个timeout数值 2、同时取出从库中的timeout值对比判断从库与主库的延迟
./mysql/bin/mysqld_safe --user=mysql & # 启动mysql服务
./mysql/bin/mysqladmin -uroot -p -S ./mysql/data/mysql.sock shutdown # 停止mysql服务
mysqlcheck -uroot -p -S mysql.sock --optimize --databases account # 检查、修复、优化MyISAM表
mysqlbinlog slave-relay-bin.000001 # 查看二进制日志(报错加绝对路径)
mysqladmin -h myhost -u root -p create dbname # 创建数据库
flush privileges; # 刷新
show databases; # 显示所有数据库
use dbname; # 打开数据库
show tables; # 显示选中数据库中所有的表
desc tables; # 查看表结构
drop database name; # 删除数据库
drop table name; # 删除表
create database name; # 创建数据库
select 列名称 from 表名称; # 查询
show grants for repl; # 查看用户权限
show processlist; # 查看mysql进程
select user(); # 查看所有用户
show slave status\G; # 查看主从状态
show variables; # 查看所有参数变量
show table status # 查看表的引擎状态
drop table if exists user # 表存在就删除
create table if not exists user # 表不存在就创建
select host,user,password from user; # 查询用户权限 先use mysql
create table ka(ka_id varchar(6),qianshu int); # 创建表
SHOW VARIABLES LIKE 'character_set_%'; # 查看系统的字符集和排序方式的设定
show variables like '%timeout%'; # 查看超时(wait_timeout)
delete from user where user=''; # 删除空用户
delete from user where user='sss' and host='localhost' ; # 删除用户
ALTER TABLE mytable ENGINE = MyISAM ; # 改变现有的表使用的存储引擎
SHOW TABLE STATUS from 库名 where Name='表名'; # 查询表引擎
CREATE TABLE innodb (id int, title char(20)) ENGINE = INNODB # 创建表指定存储引擎的类型(MyISAM或INNODB)
grant replication slave on *.* to '用户'@'%' identified by '密码'; # 创建主从复制用户
ALTER TABLE player ADD INDEX weekcredit_faction_index (weekcredit, faction); # 添加索引
alter table name add column accountid(列名) int(11) NOT NULL(字段不为空); # 插入字段
update host set monitor_state='Y',hostname='xuesong' where ip='192.168.1.1'; # 更新数据
数据库操作
## 创建数据并指定数据库
create database `datas` character set utf8mb4 collate utf8mb4_general_ci;
#一般环境不需要源码包编译安装直接apt-get即可
$ sudo apt-get install mysql-server mysql-client
# 停止mysql服务
$ sudo service mysql stop
# 如果提示
stop: Unknown job: mysql
# 执行下面命令几个
sudo initctl reload-configuration
# 停止服务后编辑下面的配置文件
sudo vim /etc/mysql/my.cnf
# 启动mysql服务
$ sudo service mysql start
# 查看数据库信息
mysql>\s
# 查看引擎
mysql> show engines;
# 查看插件
mysql> show plugins;
# 查看数据库执行进程
mysql> show processlist ;
mysql用户管理
# 创建用户:
# 指定ip:192.118.1.1的mjj用户登录
create user 'alex'@'192.118.1.1' identified by '123';
# 指定ip:192.118.1.开头的mjj用户登录
create user 'alex'@'192.118.1.%' identified by '123';
# 指定任何ip的mjj用户登录
create user 'alex'@'%' identified by '123';
# 删除用户
drop user '用户名'@'IP地址';
# 修改用户
rename user '用户名'@'IP地址' to '新用户名'@'IP地址';
# 修改密码
set password for '用户名'@'IP地址'=Password('新密码');
#查看权限
show grants for '用户'@'IP地址'
#授权 mjj用户仅对db1.t1文件有查询、插入和更新的操作
grant select ,insert,update on db1.t1 to "alex"@'%';
# 表示有所有的权限,除了grant这个命令,这个命令是root才有的。mjj用户对db1下的t1文件有任意操作
grant all privileges on db1.t1 to "alex"@'%';
#mjj用户对db1数据库中的文件执行任何操作
grant all privileges on db1.* to "alex"@'%';
#mjj用户对所有数据库中文件有任何操作
grant all privileges on *.* to "alex"@'%';
#取消权限
# 取消mjj用户对db1的t1文件的任意操作
revoke all on db1.t1 from 'alex'@"%";
# 取消来自远程服务器的mjj用户对数据库db1的所有表的所有权限
revoke all on db1.* from 'alex'@"%";
# 取消来自远程服务器的mjj用户所有数据库的所有的表的权限
revoke all privileges on *.* from 'alex'@'%';
#创建用户
CREATE USER "allen" IDENTIFIED BY "1234";
#删除用户
DROP USER 用户名;
#修改用户密码
UPDATE USER SET PASSWORD=PASSWORD('000000') WHERE USER='ucenter';
#授于用户权限
GRANT ALL ON workcms.* TO ucenter@'%' IDENTIFIED BY "111111";
# 用户权限
# mysql中可以给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,
#主要使用grant命令,用法格式为:
grant 权限 on 数据库对象 to 用户
# 一、grant 普通数据用户,查询、插入、更新、删除 数据库中所有表数据的权利。
grant select on testdb.* to common_user@’%’
grant insert on testdb.* to common_user@’%’
grant update on testdb.* to common_user@’%’
grant delete on testdb.* to common_user@’%’
#或者,用一条 mysql 命令来替代:
grant select, insert, update, delete on testdb.* to common_user@’%’
#grant 数据库开发人员,创建表、索引、视图、存储过程、函数。。。等权限。
grant 创建、修改、删除 mysql 数据表结构权限。
grant create on testdb.* to developer@’192.168.0.%’;
grant alter on testdb.* to developer@’192.168.0.%’;
grant drop on testdb.* to developer@’192.168.0.%’;
grant 操作 mysql 外键权限。
grant references on testdb.* to developer@’192.168.0.%’;
grant 操作 mysql 临时表权限。
grant create temporary tables on testdb.* to developer@’192.168.0.%’;
grant 操作 mysql 索引权限。
grant index on testdb.* to developer@’192.168.0.%’;
grant 操作 mysql 视图、查看视图源代码 权限。
grant create view on testdb.* to developer@’192.168.0.%’;
grant show view on testdb.* to developer@’192.168.0.%’;
grant 操作 mysql 存储过程、函数 权限。
grant create routine on testdb.* to developer@’192.168.0.%’; - now, can show procedure status
grant alter routine on testdb.* to developer@’192.168.0.%’; - now, you can drop a procedure
grant execute on testdb.* to developer@’192.168.0.%’;
#grant 普通 dba 管理某个 mysql 数据库的权限。
grant all privileges on testdb to dba@’localhost’
其中,关键字 “privileges” 可以省略。
#grant 高级 dba 管理 mysql 中所有数据库的权限。
grant all on *.* to dba@’localhost’
#mysql grant 权限,分别可以作用在多个层次上。grant 作用在整个 mysql 服务器上:
grant select on *.* to dba@localhost; - dba 可以查询 mysql 中所有数据库中的表。
grant all on *.* to dba@localhost; - dba 可以管理 mysql 中的所有数据库
#grant 作用在单个数据库上:
grant select on testdb.* to dba@localhost; - dba 可以查询 testdb 中的表。
#grant 作用在单个数据表上:
grant select, insert, update, delete on testdb.orders to dba@localhost;
#grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to dba@localhost;
#grant 作用在存储过程、函数上:
grant execute on procedure testdb.pr_add to ’dba’@’localhost’
grant execute on function testdb.fn_add to ’dba’@’localhost’
#查看 mysql 用户权限 查看当前用户(自己)权限:
show grants;
#查看其他 mysql 用户权限:
show grants for dba@localhost;
#撤销已经赋予给 mysql 用户权限的权限。
revoke 跟 grant 的语法差不多,只需要把关键字 “to” 换成 “from” 即可:
grant all on *.* to dba@localhost;
revoke all on *.* from dba@localhost;
#mysql grant、revoke 用户权限注意事项
#grant, revoke 用户权限后,该用户只有重新连接 mysql 数据库,权限才能生效。
#如果想让授权的用户,也可以将这些权限 grant 给其他用户,需要选项 “grant option“
#grant select on testdb.* to dba@localhost with grant option;
#这个特性一般用不到。实际中,数据库权限最好由 dba 来统一管理。
#注意:修改完权限以后 一定要刷新服务,或者重启服务,刷新服务用:flush privileges。
查看MySQL状态及配置
show status 查看当前连接的服务器状态
show global status 查看MySQL服务器启动以来的状态
show global variables 查看MySQL服务器配置的变量
增删改的统计查看 insert delete update select查询总数
show global status like "com_insert%"
show global status like "com_delete%"
show global status like "com_update%"
show global status like "com_select%"
Innodb影响行数
show global status like "innodb_rows%";
MySQL连接总次数
show global status like "connection%";
查看MySQL慢查询次数
show global status like "%slow%";
show global variables like "%slow%";
log_slow_queries = on slow_query_log = on 表明慢查询日志已经开启
slow_query_log_file 慢查询日志文件的路径
show global variables like "%long_query%";
当前连接
show processlist;只列出前100条,如果想全列出请使用show full processlist;
mysql> show processlist;
命令: show status;
命令:show status like '%下面变量%';
Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。
Aborted_connects 尝试已经失败的MySQL服务器的连接的次数。
Connections 试图连接MySQL服务器的次数。
Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。
Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。
Delayed_writes 用INSERT DELAYED写入的行数。
Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。
Flush_commands 执行FLUSH命令的次数。
Handler_delete 请求从一张表中删除行的次数。
Handler_read_first 请求读入表中第一行的次数。
Handler_read_key 请求数字基于键读行。
Handler_read_next 请求读入基于一个键的一行的次数。
Handler_read_rnd 请求读入基于一个固定位置的一行的次数。
Handler_update 请求更新表中一行的次数。
Handler_write 请求向表中插入一行的次数。
Key_blocks_used 用于关键字缓存的块的数量。
Key_read_requests 请求从缓存读入一个键值的次数。
Key_reads 从磁盘物理读入一个键值的次数。
Key_write_requests 请求将一个关键字块写入缓存次数。
Key_writes 将一个键值块物理写入磁盘的次数。
Max_used_connections 同时使用的连接的最大数目。
Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。
Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量。
Open_tables 打开表的数量。
Open_files 打开文件的数量。
Open_streams 打开流的数量(主要用于日志记载)
Opened_tables 已经打开的表的数量。
Questions 发往服务器的查询的数量。
Slow_queries 要花超过long_query_time时间的查询数量。
Threads_connected 当前打开的连接的数量。
Threads_running 不在睡眠的线程数量。
Uptime 服务器工作了多少秒。
备份与恢复
#怎样列出 mysqldump 中的所有选项? 中常用的选项是?
mysqldump –help
mysqldump
All-databases
Databases
Routines
Single-transaction (它不会锁住表) – 一直在 innodb databases 中使用
Master-data – 复制 (现在忽略了)
No-data – 它将 dump 一个没有数据的空白数据库
#–singletransaction 选项避免了 innodb databases 备份期间的任何锁,如果你使用这个选项,在备份期间,没有锁
mysqldump -u [uname] -p[pass] –databases [dbname][dbname2] > [backupfile.sql]
##mysqldump命令
mysqldump -u [uname] -p[pass] –databases [dbname][dbname2] > [backupfile.sql]
#使用 mysqldump 怎样备份所有数据库
mysqldump -u root -p –all-databases > backupfile.sql
# mysqldump 怎样备份指定的数据库
mysqldump -u root -p –databases school hospital > backupfile.sql
# mysqldump 怎样备份指定的表
mysqldump –user=root –password=mypassword -h localhost databasename table_name_to_dump table_name_to_dump_2 > dump_only_two_tables_file.sql
# 仅获取 DDL
mysqldump -u root -p –all-databases –no-data > backupfile.sql
# 怎样备份位于其他服务器的远程数据库
mysqldump -h 172.16.25.126 -u root -ppass dbname > dbname.sql
# mysqldump 全备恢复
mysql -uroot -p db_name < 全备.sql
# mysql 命令行下
source 全备.sql
#使用 mysqldump 怎样备份所有数据库?
mysqldump -u root -p –all-databases > backupfile.sql
#使用 mysqldump 怎样备份指定的数据库?
mysqldump -u root -p –databases school hospital > backupfile.sql
#使用 mysqldump 怎样备份指定的表?
mysqldump –user=root –password=mypassword -h localhost databasename table_name_to_dump
table_name_to_dump_2 > dump_only_two_tables_file.sql
#我不想要数据,怎样仅获取 DDL?
mysqldump -u root -p –all-databases –no-data > backupfile.sql
#一次 mysqldump 备份花费多长时间?
#这依赖于数据库大小,100 GB 大小的数据库可能花费两小时或更长时间
# 样备份位于其他服务器的远程数据库?
mysqldump -h 172.16.25.126 -u root -ppass dbname > dbname.sql
#–routines 选项的含义是什么?
#通过使用 -routines 产生的输出包含 CREATE PROCEDURE 和 CREATE FUNCTION
#语句用于重新创建 routines。如果你有 procedures 或 functions 你需要使用这个选项
#使用 mysqldump 备份的常用命令是什么?
nohup mysqldump –socket=mysql.sock –user=user1 –password=pass –single-transaction
–flush-logs –master-data=2 –all-databases –extended-insert –quick –routines > market_dump.sql 2> market_dump.err &
#使用 mysqldump 怎样压缩一个备份?注意: 压缩会降低备份的速度
Mysqldump [options] | gzip > backup.sql.gz
#怎样通过使用 mysqldump 来恢复备份?- 使用来源数据的方法
Mysql –u root –p < backup.sql
#在恢复期间我想记录错误到日志中,我也想看看恢复的执行时间?
Time Mysql –u root –p < backup.sql > backup.out 2>&1
#怎样从一个多数据库备份中提取一个数据库备份(假设数据库名字是 test)?
sed -n '/^-- Current Database: `test`/,/^-- Current Database: `/p' fulldump.sql > test.sql
# 导出数据库为dbname的表结构
mysqldump -uuser -pdbpasswd -d dbname >db.sql;
# 导出数据库为dbname某张表结构
mysqldump -uuser -pdbpasswd -d dbname table_name>db.sql;
# 导出数据库为dbname所有表结构及表数据
mysqldump -uuser -pdbpasswd dbname >db.sql;
# 导出数据库为dbname某张表结构及表数据
mysqldump -uuser -pdbpasswd dbname table_name>db.sql;
# 批量导出dbname数据库中多张表结构及表数据
mysqldump -uuser -pdbpasswd dbname table_name1 table_name2 table_name3>db.sql;
# 批量导出dbname数据库中多张表结构
mysqldump -uuser -pdbpasswd -d dbname table_name1 table_name2 table_name3>db.sql;
其他操作
在该文件的[mysqld]下面新增如下配置
```bash
# 新增
character_set_server=utf8
init_connect='SET NAMES utf8'
常用sql
# 随机
SELECT * FROM address WHERE id >= (SELECT floor(RAND() * (SELECT MAX(id) FROM address))) ORDER BY id LIMIT 0,10
# 随机
SELECT *,RAND() as r FROM address ORDER BY r LIMIT 0,10
# insert into select from的使用
INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name
INSERT INTO a(field1,field2) SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
# create table as select
# 复制表和表数据
CREATE TABLE app_enword_user_old SELECT * FROM app_enword_user;
#复制全部数据
select * into new_table from old_table;
# To backup all databases 备份所有数据库
mysqldump --all-databases --all-routines -u root -p > ~/fulldump.sql
# To restore all databases 要还原所有数据库
mysql -u root -p < ~/fulldump.sql
# To create a database in utf8 charset 在utf8 charset中创建数据库
CREATE DATABASE owa CHARACTER SET utf8 COLLATE utf8_general_ci;
# To add a user and give rights on the given database
#添加用户并授予给定数据库权限
GRANT ALL PRIVILEGES ON database.* TO 'user'@'localhost'IDENTIFIED BY 'password' WITH GRANT OPTION;
#To list the privileges granted to the account that you are using to connect to the server. Any of the 3 statements will work.
#列出授予用于连接服务器的帐户的权限。 3个陈述中的任何一个都可以。
SHOW GRANTS FOR CURRENT_USER();
SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
# Basic SELECT Statement
#基本SELECT语句
SELECT * FROM tbl_name;
# Basic INSERT Statement
#基本INSERT语句
INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);
# Basic UPDATE Statement
#基本更新声明
UPDATE tbl_name SET col1 = "example";
# Basic DELETE Statement
#基本DELETE语句
DELETE FROM tbl_name WHERE user = 'jcole';
# To check stored procedure
#检查存储过程
SHOW PROCEDURE STATUS;
# To check stored function
#检查存储的功能
SHOW FUNCTION STATUS;
# 修改自增长起始值
ALTER TABLE sys_upload_file AUTO_INCREMENT=142877;
mysql导入文件
#记录MySQL导入txt文件命令:load data infile [文件路径/文件名.txt] into table [表名](col1,col2,col3...);
load data infile '/home/data/test.txt' into table temp(col1,col2,col3);默认分隔符是空格;
load data infile "/data/load.txt" replace into table test fields terminated by ',' lines terminated by '/n';
mysql主从复制失败恢复
slave stop; reset slave; change master to master_host='10.10.10.110',master_port=3306,master_user='repl',master_password='repl',master_log_file='master-bin.000010',master_log_pos=107,master_connect_retry=60; slave start;
检测mysql主从复制延迟
1、在从库定时执行更新主库中的一个timeout数值 2、同时取出从库中的timeout值对比判断从库与主库的延迟