1、MYSQL命令相关
以指定参数启动mysql数据库
--datadir=数据库目录
--basedir=mysql主目录
--defaults-file=指定启动所用配置文件,如my.cnf,默认使用/etc/my.cnf
Mysql 导出查询结果到文件 -N 去除表头 FIELDS TERMINATED BY '' 以指定分隔符隔开
mysql -h mysqlhost -u mysql_user -p -Ne 'select user_name from user' userdb > filepathselect * from my_table where name="geqiandebei" into outfilefilename fields terminated by '|';"
创建用户: create user '用户名'@'主机' IDENTIFIED BY '密码';
权限分配:GRANT ALL ON * TO '用户名'@'主机' ; 最高权限
GRANT SELECT,UPDATE,INSERT,DELETE ON 数据库名.表名 TO '用户名'@'主机' ;
flush privileges; 刷新数据库使配置生效。
导出数据库数据
mysqldump -u用户名 -p 密码 数据库名 >test.sql
触发器使用
create trigger 触发器名字 时间[BEFORE AFTE] 事件[DELETE UPDATE INSERT] ON 表名字
FOR EACH ROW
BEGIN
SQL语句
END;
删除出发器 DROP TRIGGER 触发器名字 ;
2、常见使用及编程问题:
一、MySql Error Code: 2006 – MySQL 服务器已离线 原因:数据库连接已断开,默认一个连接在8小时(28800秒)中未被使用的时候Mysql将其释放。①建议修改MYSQL参数
max_allowed_packet=100M
interactive_timeout=28800000
wait_timeout=28800000
②完善代码,在执行查询语句之前先用mysql_ping()检查连接,如果连接已失效则重连,用此方法就算重启了数据库,程序也不用重启
初始化的时候:
mysql_init() ...
mysql_real_connect()...
char value = 1;
mysql_options(&my_connection, MYSQL_OPT_RECONNECT, (char *)&value);
执行语句的时候:
mysql_ping(&my_connection);
mysql_reslt_local = mysql_query(&my_connection, mysql_tmp_local );
二、编码问题
①修改数据库编码
配置文件/etc/my.cnf 中 [mysqld] 增加 default-character-set=utf8
②命令行操作,执行 show variables like 'characer%'; 查看编码
set character_set_client=utf8 设置对应编码
③设置忽略大小写
配置文件/etc/my.cnf 中 [mysqld] 增加 lower_case_table_names=1 (1忽略大小写 0 不忽略)
初始化连接时,设置默认编码,C语言写入mysql数据时需要设置写入时的编码
mysql_query(&my_connection,"set names gbk");
ret = mysql_set_character_set(mysql, "utf8"); // 推荐使用,重连时仍可保持设置生效
三、其他问题
① 删除数据库时报 “MYSQL删除数据库报 ERROR 1010 (HY000): Error dropping database (can't rmdir ...”
找到MYSQL数据库目录,删除数据库对应的文件夹,Linux下默认在 /var/lib/mysql/
②重装后启动Mysql提示“解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]”
建议参考:http://zhangge.net/4225.html
问题可能是之前版本的文件和现在版本有冲突之类的,本人只是为了重装,试了很多办法没解决后,直接卸载MYSQL后,手动删掉MYSQL的所有文件,然后重装解决。不禁觉得这种方式更省时间。
③登陆的时候遇到“mysql Access denied for user root@localhost”
一般有几种原因:一、密码输错 二、对此用户限制了localhost登录
刚装完MYSQL5.6的时候,用mysql -uroot 和mysql-uroot -proot 登陆都遇到这个问题,本来mysql默认是没密码的。觉得奇怪。后面发现mysql5.6搞了一个初始密码,比如我是在Linux下用root装的MYSQL,在root用户的主目录下就有一个.mysql_secret的文件,文件内容即是mysql的初始密码。
④此问题接上步,用初始密码登录之后,提示“ERROR 1820 (HY000): You must SET PASSWORD before executing this statement”
百度了大半天,都是说用 SET PASSWORD = PASSWORD('新密码') 然而整了之后提示另一个"ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number;"大意是说密码不能用明文。(PASSWORD()这个函数就已经有加密作用了)。
解决办法:登陆mysql之后,先敲 set old_passwords=0 ,然后再进行上步。
⑤启动MYSQL失败: Another MySQL daemon already running with the same unix socket
service mysqld stop
mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak
service mysqld start