您的位置:首页 > 数据库 > MySQL

mysql 的一些常见问题

2015-05-07 14:00 183 查看

1.解决mysql–Can’t get stat of ” (Errcode: 13)

今天在导入mysql数据的时候,出现下面的错误:

mysql> load data infile '/root/aaa' into table test fields terminated by ',' lines terminated by '\n';
mysql> ERROR 13 (HY000): Can't get stat of '/root/aaa' (Errcode: 13)

mysql> load data infile '/root/Downloads/roster.txt' into table ofRoster;
13 - Can't get stat of '/root/Downloads/roster.txt' (Errcode: 13)


开始还以为是/root/aaa文件权限或者是mysql的root用户权限的问题,后来想不对呀,mysql的root用户是超级用户,肯定有权限的,那问题就出在/root/aaa文件的权限上,后来把/root/aaa的权限改成777,执行操作后还是不行。

呵呵,原来是aaa文件所在的文件目录权限的问题,这个好办,换到/tmp/aaa,执行上述操作看看:

mysql> load data infile '/tmp/aaa' into table users_groups fields terminated by ',' lines terminated by '\n';
Query OK, 14 rows affected (0.01 sec)
Records: 14 Deleted: 0 Skipped: 0 Warnings: 0


ok,成功了!

之所以要用/tmp目录的原因是mysql默认使用了/tmp作为临时读写目录。

mysql> show variables like '%tmpdir%';
+-------------------+-------+
| Variable_name | Value |
+-------------------+-------+
| slave_load_tmpdir | /tmp |
| tmpdir | /tmp |
+-------------------+-------+
2 rows in set (0.00 sec)


FIELDS TERMINATED BY

FIELDS TERMINATED BY 子句定义用于在输入文件中区分字段结束位置的分隔符。您必须通过下列三种方法中的一种方法来指定此字符:

括在双引号中,例如 “:”

括在单引号中,例如 ‘:’

以十六进制格式指定,例如 X’3A’

使用十六进制格式时,必须使用单引号,而不能使用双引号。

注意,FIELDS TERMINATED BY 子句指定分隔符,而不是真正的终止符;在最后一个字段之后,指定的字符不是必需的。例如,如果分隔符是冒号,那么下面这两种数据文件格式等同并且都有效:

1:2:3:

或者

1:2:3

注意,接受最后一个字段后面的尾部冒号,但该冒号不是必需的。

当列数据本身包含用于括住列数据的字符时,请在 FIELDS TERMINATED BY 子句后面使用 OPTIONALLY ENCLOSED BY 子句。以下是一个控制文件示例:

FIELDS TERMINATED BY ‘,’

OPTIONALLY ENCLOSED BY “’”

在以上示例中,分隔符是逗号。

243修改配置文件 增加 /tmp/mysqldata/ r, /tmp/mysqldata/* rw,

root@dpi-test-1:/tmp/mysqldata# cat /etc/apparmor.d/usr.sbin.mysqld

# vim:syntax=apparmor

# Last Modified: Tue Jun 19 17:37:30 2007

#include <tunables/global>

/usr/sbin/mysqld {

#include <abstractions/base>

#include <abstractions/nameservice>

#include <abstractions/user-tmp>

#include <abstractions/mysql>

#include <abstractions/winbind>

capability dac_override,

capability sys_resource,

capability setgid,

capability setuid,

network tcp,

/etc/hosts.allow r,

/etc/hosts.deny r,

/etc/mysql/*.pem r,

/etc/mysql/conf.d/ r,

/etc/mysql/conf.d/* r,

/etc/mysql/*.cnf r,

/usr/lib/mysql/plugin/ r,

/usr/lib/mysql/plugin/*.so* mr,

/usr/sbin/mysqld mr,

/usr/share/mysql/** r,

/var/log/mysql.log rw,

/var/log/mysql.err rw,

/var/lib/mysql/ r,

/var/lib/mysql/** rwk,

/var/log/mysql/ r,

/var/log/mysql/* rw,

/var/run/mysqld/mysqld.pid rw,

/var/run/mysqld/mysqld.sock w,

/run/mysqld/mysqld.pid rw,

/run/mysqld/mysqld.sock w,

/sys/devices/system/cpu/ r,

# Site-specific additions and overrides. See local/README for details.

#include <local/usr.sbin.mysqld>

}

root@dpi-test-1:/tmp/mysqldata# vi /etc/apparmor.d/usr.sbin.mysqld

# vim:syntax=apparmor

# Last Modified: Tue Jun 19 17:37:30 2007

#include <tunables/global>

/usr/sbin/mysqld {

#include <abstractions/base>

#include <abstractions/nameservice>

#include <abstractions/user-tmp>

#include <abstractions/mysql>

#include <abstractions/winbind>

capability dac_override,

capability sys_resource,

capability setgid,

capability setuid,

network tcp,

/etc/hosts.allow r,

/etc/hosts.deny r,

/etc/mysql/*.pem r,

/etc/mysql/conf.d/ r,

/etc/mysql/conf.d/* r,

/etc/mysql/*.cnf r,

/usr/lib/mysql/plugin/ r,

/usr/lib/mysql/plugin/*.so* mr,

/usr/sbin/mysqld mr,

/usr/share/mysql/** r,

/var/log/mysql.log rw,

/var/log/mysql.err rw,

/var/lib/mysql/ r,

/var/lib/mysql/** rwk,

/var/log/mysql/ r,

/var/log/mysql/* rw,

/var/run/mysqld/mysqld.pid rw,

/var/run/mysqld/mysqld.sock w,

/run/mysqld/mysqld.pid rw,

/run/mysqld/mysqld.sock w,

/sys/devices/system/cpu/ r,

/tmp/mysqldata/ r,

/tmp/mysqldata/* rw,

/etc/apparmor.d/usr.sbin.mysqld 48L, 1094C written

root@dpi-test-1:/tmp/mysqldata# ^C

root@dpi-test-1:/tmp/mysqldata# time mysqlimport -uroot -pimtest test /tmp/mysqldata/ofID.txt

mysqlimport: Error: 29, File '/tmp/mysqldata/ofID.txt' not found (Errcode: 13), when using table: ofID

real    0m0.006s

user    0m0.004s

sys     0m0.000s

root@dpi-test-1:/tmp/mysqldata# sudo /etc/init.d/apparmor reload

* Reloading AppArmor profiles

Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd

...done.


PS参考:

http://publib.boulder.ibm.com/infocenter/soliddb/v6r3/index.jsp?topic=/com.ibm.swg.im.soliddb.admin.doc/doc/fields.terminated.by.html

http://docs.oracle.com/cd/E17952_01/refman-5.6-en/mysqldump-delimited-text.html

2.外键关联不上

mysql> SHOW ENGINE INNODB STATUS;

| Type   | Name | Status
| InnoDB |      |
=====================================
2015-03-17 15:25:31 5fc INNODB MONITOR OUTPUT
=====================================
Per second averages calculated from the last 30 seconds
-----------------
BACKGROUND THREAD
-----------------
srv_master_thread loops: 75 srv_active, 0 srv_shutdown, 5559 srv_idle
srv_master_thread log flush and writes: 5634
----------
SEMAPHORES
----------
OS WAIT ARRAY INFO: reservation count 303
OS WAIT ARRAY INFO: signal count 361
Mutex spin waits 72, rounds 1532, OS waits 40
RW-shared spins 233, rounds 7320, OS waits 244
RW-excl spins 8, rounds 1347, OS waits 19
Spin rounds per wait: 21.28 mutex, 31.42 RW-shared, 168.38 RW-excl
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2015-03-17 15:24:47 5fc Error in foreign key constraint of table test1/#sql-13e4_23:
FOREIGN KEY (`bookID`) REFERENCES `book` (`bookID`):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
See http://dev.mysql.com/doc/refman/5.6/en/innodb-foreign-key-constraints.html for correct foreign key definition.
------------
TRANSACTIONS
------------
Trx id counter 80924
Purge done for trx's n:o < 80911 undo n:o < 0 state: running but idle
History list length 693
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0, not started
MySQL thread id 35, OS thread handle 0x5fc, query id 2010 localhost 127.0.0.1 root init
SHOW ENGINE INNODB STATUS
---TRANSACTION 80906, not started
MySQL thread id 34, OS thread handle 0x1e58, query id 2005 localhost 127.0.0.1 root cleaning up
--------
FILE I/O
--------
I/O thread 0 state: wait Windows aio (insert buffer thread)
I/O thread 1 state: wait Windows aio (log thread)
I/O thread 2 state: wait Windows aio (read thread)
I/O thread 3 state: wait Windows aio (read thread)
I/O thread 4 state: wait Windows aio (read thread)
I/O thread 5 state: wait Windows aio (read thread)
I/O thread 6 state: wait Windows aio (write thread)
I/O thread 7 state: wait Windows aio (write thread)
I/O thread 8 state: wait Windows aio (write thread)
I/O thread 9 state: wait Windows aio (write thread)
Pending normal aio reads: 0 [0, 0, 0, 0] , aio writes: 0 [0, 0, 0, 0] ,
ibuf aio reads: 0, log i/o's: 0, sync i/o's: 0
Pending flushes (fsync) log: 0; buffer pool: 0
617 OS file reads, 3024 OS file writes, 1203 OS fsyncs
0.00 reads/s, 0 avg bytes/read, 0.00 writes/s, 0.00 fsyncs/s
-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
merged operations:
insert 0, delete mark 0, delete 0
discarded operations:
insert 0, delete mark 0, delete 0
Hash table size 1106407, node heap has 2 buffer(s)
0.00 hash searches/s, 0.00 non-hash searches/s
---
LOG
---
Log sequence number 102690638
Log flushed up to   102690638
Pages flushed up to 102690638
Last checkpoint at  102690638
0 pending log writes, 0 pending chkp writes
627 log i/o's done, 0.00 log i/o's/second
----------------------
BUFFER POOL AND MEMORY
----------------------
Total memory allocated 549715968; in additional pool allocated 0
Dictionary memory allocated 115188
Buffer pool size   32768
Free buffers       31878
Database pages     888
Old database pages 307
Modified db pages  0
Pending reads 0
Pending writes: LRU 0, flush list 0, single page 0
Pages made young 585, not young 14
0.00 youngs/s, 0.00 non-youngs/s
Pages read 560, created 338, written 2026
0.00 reads/s, 0.00 creates/s, 0.00 writes/s
No buffer pool page gets since the last printout
Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s
LRU len: 888, unzip_LRU len: 0
I/O sum[9]:cur[0], unzip sum[0]:cur[0]
--------------
ROW OPERATIONS
--------------
0 queries inside InnoDB, 0 queries in queue
0 read views open inside InnoDB
Main thread id 7500, state: sleeping
Number of rows inserted 0, updated 0, deleted 0, read 0
0.00 inserts/s, 0.00 updates/s, 0.00 deletes/s, 0.00 reads/s
----------------------------
END OF INNODB MONITOR OUTPUT
============================
|
1 row in set


3.启动定时器,让定时器定期执行存储过程。

window 直接更改my.ini ,找到event_scheduler改为1;

show variables like '%event%';
set global  event_scheduler=1;


my.cnf中的[mysqld]部分添加如下内容,然后重启mysql(mysql重启命令:service mysqld restart)

event_scheduler=ON


[root@tingshuotong test]# whereis my.cnf
my: /etc/my.cnf


4.如何找到mysql的配置文件?

1. 先确定出使用的配置文件的路径(如果未启动,可先启动)

ps aux | grep mysql


找见mysqld或mysqld_safe的那一行,看下defaults-file=/path/file ,那个/path/file就是配置文件路径;如果没有显示,如下:

1 进程显示说明没有使用到配置文件,采用的是默认的选项。

2 你启动mysql服务的方式是什么?

如果是通过 /etc/init.d/mysql 启动的,应该会默认读取 /etc/my.cnf ;如果没起作用的话,在/etc/init.d/mysql 文件的(datadir= )下面加上一行:cnf_file=/etc/my.cnf

2. 也可以直接创建 /etc/my.cnf

从你安装的mysql的相关目录中(可能是/usr/include/mysql或/usr/share/mysql)找一个my.cnf 或 my-small.cnf 拷贝为/etc/my.cnf,mysql启动时会优先使用这个配置文件。

3. 添加常用配置

在配置文件中的[mysqld]下边加些常用 的东西吧:

max_allowed_packet=32M
character_set_server=gbk
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: