mysql 数据库常用常用
MySQL 数据库常用命令
MySQL常用命令
create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show tables; 显示表 describe tablename; 表的详细描述 select 中加上distinct去除重复字段 mysqladmin drop databasename 删除数据库前,有提示。 显示当前mysql版本和当前日期 select version(),current_date;
修改mysql中root的密码:
shell>mysql -u root -p mysql> update user set password=password(”xueok654123″) where user=’root’; mysql> flush privileges //刷新数据库 mysql>use dbname; 打开数据库: mysql>show databases; 显示所有数据库 mysql>show tables; 显示数据库mysql中所有的表:先use mysql;然后 mysql>describe user; 显示表mysql数据库中user表的列信息);
grant
创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个 mysql> grant all privileges on . to user@localhost identified by ’something’ with 增加新用户 格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码” GRANT ALL PRIVILEGES ON . TO monty@localhost IDENTIFIED BY ’something’ WITH GRANT OPTION; GRANT ALL PRIVILEGES ON . TO monty@”%” IDENTIFIED BY ’something’ WITH GRANT OPTION; 删除授权: mysql> revoke all privileges on . from root@”%”; mysql> delete from user where user=”root” and host=”%”; mysql> flush privileges; 创建一个用户custom在特定客户端it363.com登录,可访问特定数据库fangchandb mysql >grant select, insert, update, delete, create,drop on fangchandb.* to custom@ it363.com identified by ‘ passwd’ 重命名表: mysql > alter table t1 rename t2;
mysqldump
备份数据库 shell> mysqldump -h host -u root -p dbname >dbname_backup.sql 恢复数据库 shell> mysqladmin -h myhost -u root -p create dbname shell> mysqldump -h host -u root -p dbname < dbname_backup.sql 如果只想卸出建表指令,则命令如下: shell> mysqladmin -u root -p -d databasename > a.sql 如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下: shell> mysqladmin -u root -p -t databasename > a.sql 那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢? mysqldump -T./ phptest driver 其中,只有指定了-T参数才可以卸出纯文本文件,表示卸出数据的目录,./表示当前目录,即与mysqldump同一目录。如果不指定driver 表,则将卸出整个数据库的数据。每个表会生成两个文件,一个为.sql文件,包含建表执行。另一个为.txt文件,只包含数据,且没有sql指令。 还原导入sql文件 mysql>source /root/sql.sql;
可将查询存储在一个文件中并告诉mysql从文件中读取查询而不是等待键盘输入。可利用外壳程序键入重定向实用程序来完成这项工作。
例如,如果在文件my_file.sql 中存放有查 询,可如下执行这些查询: 例如,如果您想将建表语句提前写在sql.txt中: mysql > mysql -h myhost -u root -p database < sql.txt
慢查询日志
检查慢查询日志 show variables like '%slow_query_log%'; 临时开启慢查询日志 mysql>set global slow_query_log = 1; 永久开启慢查询日志 vim /etc/my.cnf; [mysqld]下新增 slow_query_log=1 slow_query_log_file=/var/lib/mysql/localhost-slow.log 慢查询阀值 show variables like '%long_query_time%'; 设置临时阀值 set global long_query_time=5; //设置完成后,从新登陆后生效 永久设置阀值 [mysqld]下新增 long_query_time=5
mysqldumpslow工具
sell>mysqldumpslow -h; //查看帮助文件 获取返回记录最多的三个sql sell>mysqldumpslow -s r -t 3 /var/lib/mysql/localhost-slow.log; 获取访问次数最多的三个sql sell>mysqldumpslow -s c -t 3 /var/lib/mysql/localhost-slow.log; 按时间查询 前10条包含left join查询语句的sql sell>mysqldumpslow -s t -t 10 -g 'left join' /var/lib/mysql/localhost-slow.log;
分析表锁
查看那些表加了锁 mysql>show open tables; 分析表锁定的严重程度 mysql>show status like 'table%'; // Table_locks_immediate :即可能获取到的锁数;// Table_locks_waited 需要等待的锁数(数值越大说明锁竞争越大) //根据 Table_locks_immediate/Table_locks_waited>5000 的值大小考虑更换数据库引擎
主从复制(需先检查主从服务器的链接权限,主要是防火墙以及mysql的远程登陆权限)
主服务器需要授权从服务器
CRANT REPLICATION slave,reload,super ON *.* TO 'root'@'192.168.2.111' IDENTIFIED BY ''ROOT; flush privileges;
主服务器在配置文件中:win的是my.ini linux 的是my.cnf;
在[mysqld]下 #ID server-id=1 #二进制记录文件 log-bin="/usr/local/mysql/data/mysql-bin" # 错误记录文件 log_error="/usr/local/mysql/data/mysql-error" #主从同步时忽略的数据库 binlog-ignore-db=mysql #指定主从同步时,同步那些数据库 binlog-do-db=test
查看主服务器状态(主从复制查看主机状态最新值)
show master status;
从服务器在配置文件中:win的是my.ini linux 的是my.cnf;
在[mysqld]下 server-id=2 log-bin="/usr/local/mysql/data/mysql-bin" replicate-do-db=test
从服务器需要授权主服务器
mysql>CHANGE MASTER TO MASTER_HOST='192.168.1.1' MASTER_USER='root' MASTER_PORT=3306 MASTER_LOG_FILE='mysql-bin.000001' MASTER_LOG_POS=107; #如果之前使用开去过会报错, stop slave; #从机需要开启 start slave; #检查 主要观察slave_io_Running和slave_sql_Running;(确保都是yes 如不是查看下方日志last_io_error) show slave status \G #版本低是出现io错误时可能是版本不兼容。首先查看server-id 是否重复了 show variables like 'server_id'; #出现这种问题代表修改文件是无效的 stop slave; set global server_id=2; start slave;