mysql
安装mysql
yum -y install mysql
重启mysql
service mysqld status 查看状态
service mysqld stop 停止mysql
service mysqld restart 重启mysql
service mysqld start 启动mysql
登录数据库
./mysql -h 127.0.0.1 -u root -p
创建用户
insert into mysql.user(Host,User,Password) values("%","root",password("root"));
解决Field 'ssl_cipher' doesn't have a default value的问题(mysql创建用户名和密码)
mysql>GRANT USAGE ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
授权
grant all privileges on *.* to root@"%" identified by 'root';
grant select,update,create,drop on *.* to connbox @"%" identified by '918sNPH4@A&5wDKd';
创建一个数据库(testDB)
create database testDB;
授权test用户拥有testDB数据库的所有权限
grant all privileges on testDB.* to test@localhost identified by '1234';
格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码";
如果想指定部分权限给一用户:
grant select,update on testDB.* to test@localhost identified by '1234';
授权test用户拥有所有数据库的某些权限
grant select,delete,update,create,drop on *.* to test@"%" identified by "1234";
@"%" 表示对所有非本地主机授权,不包括localhost。
刷新系统权限表
flush privileges;
删除用户
Delete FROM user Where User='dmp' and Host='%';
删除用户的数据库
drop database testDB;
删除账户及权限
drop user shop@'127.0.0.1';
drop user 用户名@ localhost;
修改指定用户密码
mysql>update mysql.user set password='root' where User="root" and Host="%";
5.7版本的MYSQL的用户表的密码字段变了, 不再是password字段 而是authentication_string字段
update mysql.user set authentication_string='e54s3SOQv7sayqP3' ('密码') where user='root' and Host = 'localhost'; 或者 set password for 'root'@'localhost'='e54s3SOQv7sayqP3' ('密码');
查看MYSQL数据库中所有用户
select distinct concat('user: ''',user,'''@''',host,''';') as query from mysql.user;
导出数据库
mysqldump -u用戶名 -p密码 -d 数据库名 表名 脚本名;
./mysqldump -h 127.0.0.1 -u root -p dmp wechat_template>wechat_template.sql;
表中添加字段
alter table zr_routes_scan0_day_1 add `last_upload_time` int(11) unsigned DEFAULT '0' COMMENT '最后一次上报时间';
删除表中字段
alter tabletable zr_routes_scan0_21drop columnlast_upload_time;
列出所有数据库
show databases;
切换数据库
use '数据库名';
列出所有表
show tables;
显示数据表结构
describe 表名;
删除数据库和数据表
drop database 数据库名;
drop table 数据表名;
字段局部替换
update table set name=replace(name,'aa','bb');
MySQL server has gone away
应用程序(比如PHP)长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。
解决方案:
在my.ini文件中添加或者修改以下两个变量:
wait_timeout=2880000
interactive_timeout = 2880000
如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...)
执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段
比如,图片数据的处理
解决方案
在my.cnf文件中添加或者修改以下变量:
max_allowed_packet = 10M (也可以设置自己需要的大小)
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。
安装federated存储引擎
install plugin federated soname 'ha_federated.so';
开启federated存储引擎
查看数据库可以支持的存储引擎
show engines;
mysql启动失败
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
windows下重新启动mysql5的方法:
在安装mysql时系统会添加服务,可以通过管理工具里面的 <服务> 一项来停止和启动mysql。这样修改的my.ini就会生效了。
2、也可以用命令行模式,在运行里输入:
停止:net stop mysql
(其中mysql为你安装的mysql服务名称)
启动:net start mysql
3、如果你没安装系统服务,也可在命令行模式定位到mysql下的bin目录里,输入:
(关闭)mysqladmin shutdown
(启动)mysqladmin start
查看事件是否开启,使用如下命令查看:
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;
如果看到event_scheduler为on或者PROCESSLIST中显示有event_scheduler的信息说明就已经开启了事件。如果显示为off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就说明事件没有开启,我们需要开启它。
开启mysql的事件,通过如下三种方式开启:
Ø 通过动态参数修改
SET GLOBAL event_scheduler = ON;
更改完这个参数就立刻生效了
注意:还是要在my.cnf中添加 event_scheduler=ON。因为如果没有添加的话,mysql重启事件又会回到原来的状态了。
Ø 更改配置文件然后重启
在my.cnf中的[mysqld]部分添加如下内容,然后重启mysql。
event_scheduler=ON
Ø 通过制定事件参数启动
mysqld ... --event_scheduler=ON
mysql设置主从复制
1、主从服务器分别作以下操作:
1.1、版本一致
1.2、初始化表,并在后台启动mysql
1.3、修改root的密码
2、修改主服务器master:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
3、修改从服务器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[不是必须]启用二进制日志
server-id=226 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
4、重启两台服务器的mysql
/etc/init.d/mysql restart
5、在主服务器上建立帐户并授权slave:
#/usr/local/mysql/bin/mysql -uroot -pmttang
mysql>GRANT REPLICATION SLAVE ON *.* to 'dertai'@'%' identified by '6TcJl8oOvwj1bQly'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。
6、登录主服务器的mysql,查询master的状态
mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 308 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
7、配置从服务器Slave:
mysql>change master to master_host='116.62.12.125',master_user='dertai',master_password='6TcJl8oOvwj1bQly',master_log_file='mysql-bin.000003',master_log_pos=296502; //注意不要断开,308数字前后无单引号。
Mysql>start slave; //启动从服务器复制功能
8、检查从服务器复制功能状态:
mysql> show slave statusG
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.222 //主服务器地址
Master_User: mysync //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
......
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
以上操作过程,主从服务器配置完成。
数据库复制报错
修改 open_files_limit = 65535
删除某个字段重复的记录
delete from zr_authlist where
mac in (select mac from ( select mac from zr_authlist group by mac having count(mac)>1) a)
and id not in ( select min(id) from (select min(id) as id from zr_authlist group by mac having count(mac)>1 ) b);
centos下彻底删除MYSQL 和重新安装MYSQL
1 删除Mysql
yum remove mysql mysql-server mysql-libs mysql-server;
find / -name mysql 将找到的相关东西delete掉;
rpm -qa|grep mysql(查询出来的东东yum remove掉)
2 安装Mysql
yum install mysql mysql-server mysql-libs mysql-server;
mysql 日志文件mysql-bin文件清除方法,和mysql-bin相关文件的配置
首先要说明一下,这些文件都是mysql的日志文件,如果不做主从复制的话,基本上是没用的,虽然没用,但是不建议使用rm命令删除,这样有可能会不安全,正确的方法是通过mysql的命令去删除。
mysql> reset master;
通过修改my.cnf文件,来设置不生成这些文件,只要删除my.cnf中的下面一行就可以了。
log-bin=mysql-bin
如果你需要复制,最好控制一下这些日志文件保留的天数,可以通过下面的配置设定日志文件保留的天数:
expire_logs_days = 7
mysql可以运行在不同sql mode模式下面,sql mode模式定义了mysql应该支持的sql语法,数据校验等!
查看默认的sql mode模式:
select @@sql_mode;
我的数据库是:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
在此模式下面,如果插入的数据的长度大于定义的长度,那么就会报错!
set session sql_mode='REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI';
在这种模式下面:插入的数据的长度大于定义的时候,就会截取,并警告,但是可以插入进去
session表示只在本次中有效
global:表示在本次连接中不生效,而对于新的连接就生效
数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题
2个解决方法:
1.临时修改:mysql>set global max_allowed_packet=524288000;修改 #512M
2.修改my.cnf,需重启mysql。
在 [MySQLd] 部分添加一句(如果存在,调整其值就可以):
max_allowed_packet=10M
The used table type doesn't support FULLTEXT indexes
修改innodb为myisam
查看最大连接数
show variables like '%max_connections%'
重新设置
set global max_connections=3600
vim /etc/my.cnf
max_connections = 200
执行编写好的sql脚本
1 source H:/1.sql
2 select ...into outfile 方式执行sql
mysql> select now() into outfile 'h:/data/2.sql';
mysql修改时区的几种方法
show variables like "%time_zone%";
set global time_zone = '+8:00'; ##修改mysql全局时区为北京时间,即我们所在的东8区
set time_zone = '+8:00'; ##修改当前会话时区
flush privileges; #立即生效
开启慢查询日
查看慢查询相关参数
show variables like 'slow_query%';
show variables like 'long_query_time';
set global slow_query_log='ON';
set global slow_query_log_file='/usr/local/mysql/data/slow.log';
set global long_query_time=1;
slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录
方法二:配置文件设置
修改配置文件my.cnf,在[mysqld]下的下方加入
[mysqld]
slow_query_log = ON
slow_query_log_file = /usr/local/mysql/data/slow.log
long_query_time = 1
MongoDb
mongoDB 不支持IPv6
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
启动mongoDB
./mongod --dbpath /usr/local/mongodb/data
设置mongoDB后台运行
./mongod --fork --dbpath /usr/local/mongodb/data --logpath /usr/local/mongodb/log/log --logappend
设置MongoDB开机启动
vi /etc/rc.local
/usr/local/mongodb/bin/mongod --fork --dbpath /usr/local/mongodb/data --logpath /usr/local/mongodb/log/log --logappend