MySQL内存引擎&x2B;初始化文件
我正在尝试设置一个MySQL数据库,以便这些表由内存引擎运行。我真的不在乎丢失一些填充的数据,但我想每天转储它(通过cronjob中的mysqldump),并将init文件设置为这个转储。然而,我似乎不知道如何使mysqldump与init文件希望SQL语句格式化的方式兼容MySQL内存引擎&x2B;初始化文件,mysql,Mysql,我正在尝试设置一个MySQL数据库,以便这些表由内存引擎运行。我真的不在乎丢失一些填充的数据,但我想每天转储它(通过cronjob中的mysqldump),并将init文件设置为这个转储。然而,我似乎不知道如何使mysqldump与init文件希望SQL语句格式化的方式兼容 用这种方式建立数据库时,我是不是遗漏了一些非常明显的东西?MySQL转储就是——将MySQL数据库内容转储为SQL。因此,没有任何方法可以将其作为数据库文件直接读取 您可以做的是修改MySQL的init脚本,以便在每次MyS
用这种方式建立数据库时,我是不是遗漏了一些非常明显的东西?MySQL转储就是——将MySQL数据库内容转储为SQL。因此,没有任何方法可以将其作为数据库文件直接读取 您可以做的是修改MySQL的init脚本,以便在每次MySQL启动时自动加载最后一次转储(通过命令行) 更好的解决方案是使用ramdisk将数据库的全部内容保存在内存中,然后定期将其复制到安全位置作为备份
尽管如此,如果您想维护数据库的内容,最好只使用一个基于磁盘的存储引擎(InnoDB或MyISAM),并为服务器提供大量RAM作为缓存。MySQL转储就是——将MySQL数据库内容转储为SQL。因此,没有任何方法可以将其作为数据库文件直接读取 您可以做的是修改MySQL的init脚本,以便在每次MySQL启动时自动加载最后一次转储(通过命令行) 更好的解决方案是使用ramdisk将数据库的全部内容保存在内存中,然后定期将其复制到安全位置作为备份
不过,如果您想维护数据库的内容,最好使用一个基于磁盘的存储引擎(InnoDB或MyISAM),只需为服务器提供大量RAM用作缓存。我的理解是--init文件要求每一条SQL语句都在一行中,并且文件中没有注释 您应该能够通过以下方式清除评论:
mysqldump --comments=false
对于一行中的每个SQL语句,我不熟悉使用mysqldump选项来实现这一点,但您可以使用一行Perl来删除所有新行:
perl -pi -w -e 's/\n//g;' theDumpFilename
我不知道--init文件是否会喜欢它,但值得一试
您可以做的另一件事是从一个脚本启动mysql,该脚本也加载到一个常规的mysqldump文件中。不是您想要的解决方案,但它可能会达到您想要的效果。我的理解是--init文件要求每一条SQL语句都在一行上,并且文件中没有注释 您应该能够通过以下方式清除评论:
mysqldump --comments=false
对于一行中的每个SQL语句,我不熟悉使用mysqldump选项来实现这一点,但您可以使用一行Perl来删除所有新行:
perl -pi -w -e 's/\n//g;' theDumpFilename
我不知道--init文件是否会喜欢它,但值得一试
您可以做的另一件事是从一个脚本启动mysql,该脚本也加载到一个常规的mysqldump文件中。这不是您想要的解决方案,但它可能会达到您想要的效果。我偶然发现了这一点,所以我将告诉您我该怎么做。首先,我在内存表中有一个ip->country db。没有理由试图“保存”它,它很容易被定期删除和重新创建,但是当它丢失并且只计划每周更新时,php的行为可能无法预测。其次,我有一堆其他的内存表。没有理由保存它们,因为它们更不稳定,寿命只有几分钟。它们将很快被刷新,但过时的数据总比没有好。此外,如果您使用任何单独的密钥缓存,可能(在某些情况下)需要先加载它们,否则您将无法加载它们。最后,如果您没有转储完整的数据库,请确保在其中放一个“use”语句,因为启动时没有其他接口(如mysql客户端)来打开数据库。。所以
cat << EOF > /var/lib/mysql/initial_load.tmp
use fieldsave_db;
cache index fieldsave_db.search in search_cache;
EOF
mysqldump --comments=false -udrinkin -pbeer@ fieldsave_db ip2c \
>> /var/lib/mysql/initial_load.tmp
mysqldump --comments=false -ufields -pavenue -B memtables \
>> /var/lib/mysql/initial_load.tmp
grep -v -- ^-- /var/lib/mysql/initial_load.tmp |tr -d '\012' \
|sed -e 's/;/;\n/g' > /var/lib/mysql/initial_load.sql
cat/var/lib/mysql/initial_load.tmp
使用fieldsave_数据库;
缓存索引字段save_db.search in search_cache;
EOF
mysqldump--comments=false-udrinkin-pbeer@fieldsave_db ip2c\
>>/var/lib/mysql/initial_load.tmp
mysqldump--comments=false-ufields-pavenue-memtables\
>>/var/lib/mysql/initial_load.tmp
grep-v--^-/var/lib/mysql/initial_load.tmp | tr-d'\012'\
|sed-e's/;/\n/g'>/var/lib/mysql/initial\u load.sql
和往常一样,YMMV,但它对我很有效。我偶然发现了这一点,所以我会告诉你我是怎么做的。首先,我在内存表中有一个ip->country db。没有理由试图“保存”它,它很容易被定期删除和重新创建,但是当它丢失并且只计划每周更新时,php的行为可能无法预测。其次,我有一堆其他的内存表。没有理由保存它们,因为它们更不稳定,寿命只有几分钟。它们将很快被刷新,但过时的数据总比没有好。此外,如果您使用任何单独的密钥缓存,可能(在某些情况下)需要先加载它们,否则您将无法加载它们。最后,如果您没有转储完整的数据库,请确保在其中放一个“use”语句,因为启动时没有其他接口(如mysql客户端)来打开数据库。。所以
cat << EOF > /var/lib/mysql/initial_load.tmp
use fieldsave_db;
cache index fieldsave_db.search in search_cache;
EOF
mysqldump --comments=false -udrinkin -pbeer@ fieldsave_db ip2c \
>> /var/lib/mysql/initial_load.tmp
mysqldump --comments=false -ufields -pavenue -B memtables \
>> /var/lib/mysql/initial_load.tmp
grep -v -- ^-- /var/lib/mysql/initial_load.tmp |tr -d '\012' \
|sed -e 's/;/;\n/g' > /var/lib/mysql/initial_load.sql
cat/var/lib/mysql/initial_load.tmp
使用fieldsave_数据库;
缓存索引字段save_db.search in search_cache;
EOF
mysqldump--comments=false-udrinkin-pbeer@fieldsave_db ip2c\
>>/var/lib/mysql/initial_load.tmp
mysqldump--comments=false-ufields-pavenue-memtables\
>>/var/lib/mysql/initial_load.tmp
grep-v--^-/var/lib/mysql/initial_load.tmp | tr-d'\012'\
|sed-e's/;/\n/g'>/var/lib/mysql/initial\u load.sql
和往常一样,YMMV,但它对我很有效。这几乎很棒,但是