Articles of mysql

使用MyISAM删除和插入MySQL行为和磁盘空间处理

我有一个关于MyISAM引擎的MySQL处理删除后的空闲空间的方式以及在插入新logging时的行为方式的问题。 例如,考虑一个新的空白数据库(例如,假设为10 kb)。 插入10000条logging(假设每条logging占用1kb)后,文件系统上的总大小变为10010kb。 然后,删除5000条logging后,文件系统上的大小仍然保持在10010 kb,即使logging数减半(这里没有什么奇怪的,这是正常的行为)。 OPTIMIZE命令可以随后对数据库进行“碎片整理”,并通过重新组织其数据来回收可用空间。 但是 ,如果我完全忽略了OPTIMIZE命令并插入了2000条新logging(所以5000条仍然有2000条新logging= 7000条logging),那么MySQL是否会将新logging的前一个删除剩余的空闲空间重用(意思是DB的大小10010 kb不会改变),或者是“追加”新的logging到数据库(也就是说,文件系统上的数据库大小将增长到12010 kb)? 谢谢! 🙂

通过networking转储架构

这似乎是一个愚蠢的问题,但是…我试图通过networking转储mysql数据库模式,和mysqldump –no-data …似乎需要大约3分钟转储我的100个表。 如果我在本地服务器上执行此操作,则需要3秒钟。 有什么办法可以使用mysqldump通过networking转储架构,但加速? 谢谢,

MySQL 5.5和MariaDB5.5为相同的数据和相同的select查询返回不同数量的列?

我一直在寻找networking一段时间,似乎无法find这种情况下的答案。 如果我能得到一些build议,将不胜感激。 简而言之就是这个问题。 我们有2台服务器。 一个在centos6 / mysql5.5上运行12个cpu核心和24GB ram,第二个在centos7 / mariadb5.5上运行24个cpu核心和32GB ram。 两者在dbms中都有相同的数据; 它使用mysqldump从mysql55复制,并导入到mariadb5.5。 mysql和mariadb的configuration也被从较小的系统复制到较大的系统; 它是完全相同的。 第一个问题是在相同的负载下, mysql5.5按照预期的方式执行load avrg。 大约4到8; mariadb5.5执行得非常糟糕,平均负载为700到900. mariadb系统上的命令“show process list”使大量长时间运行超过5分钟的连接处于“Copy to tmp table”状态。 相同的查询在较小的系统mysql5.5上可见,但是它们在1-2秒内执行。 我试图用大型内存分区上创build的tmpdir运行maraidb。 这减less了负荷,但没有太多,最终回到了700。 我注意到的第二件事是,如果我解释一个长时间运行的查询,那么从mysql返回大约3k行,而另一个服务器在相同的查询上解释相同的返回大约7k行。 我不确定是什么原因造成的。 查询主要是“select”与“和”和“或”。 感谢您的时间。 我将不胜感激这方面的任何投入。

MySQL复制:如果副本被locking,任何风险都要掌握?

如果从属副本长时间处于locking状态,那么对MySQL主机有任何危险? 我正在使用5.6.xx. 这个问题表明这是“安全的”,但并不是说性能下降。 像完全复制队列阻止事务提交是不好的。 (这发生在一些NoSQL数据库写入)所以是减缓主交易。 我打算更改我的副本模式(recollat​​ion),这将花费一个小时的表locking。 完成后,我会推动它,并以这种方式(希望)做出生动的模式改变。 在这个小时内,不会发生复制,MySQL使用的任何队列/日志系统肯定会增长。

如何用一个命令导入文件夹内的所有SQL文件?

在有LAMP的CentOS服务器上,我有一个包含10-20个SQL转储文件的文件夹。 有没有一种方法(单行查询),我可以导入所有这些? 我尝试了以下内容: login腻子,导航到所有SQL转储文件说(文件夹mysqlallfile ) mysqlallfile包含: 1.sql.gz , 2.sql.gz等等 我创buildsh文件说bulkimport.sh #!/bin/sh for filename in *.gz; do tempfile="${filename##*/}" database_name="${tempfile%%.*}" echo $database_name mysql -pPASS -u USER -e "CREATE DATABASE $database_name" gzcat $filename | mysql -pPASS -uUSER $database_name done 我在terminal下面运行命令: bash bulkimport.sh 它返回错误: bulkimport.sh: line 2: syntax error near unexpected token `$'\r'' 'ulkimport.sh: line 2: `for filename in […]

mysqldump只是停止没有错误

使用mysqldump使用.sh脚本备份30个数据库。 27 DB的备份成功,每天都是相同的大小,但是3 DB没有,似乎只是在转储过程中随机停止,没有任何错误。 这是脚本 #!/bin/bash appname=myapp dbname=mydb dbuser=myuser dbpass=mypass datestamp=`date +%d%m%y` rm -f /var/backups/* > /dev/null 2>&1 mysqldump -u$dbuser -p$dbpass $dbname > /var/backups/$dbname-$datestamp.sql && gzip /var/backups/$dbname-$datestamp.sql tar -zcf /var/backups/data-$datestamp.tar.gz /var/www/data > /dev/null 2>&1 tar -zcf /var/myapp-backups/myapp-$datestamp.tar.gz /var/www/myapp > /dev/null 2>&1 我用Mysqlcheck检查了失败的数据库,并且一切看起来都很好,所以现在我不确定在哪里查找错误 没有错误我的var / log / mysql和有一个error.log今天写在06.32这将是正确的时间cron运行,但它的空 任何想法谢谢

如果/ var / lib / mysql中有任何内容,则MySQL apt / chef安装将失败

我正在使用大厨在Ubuntu 16.04上安装默认的mysql-server软件包。 我在一个没有安装MySQL的服务器上执行,但是已经把/var/lib/mysql设置为已安装的驱动器。 因此, /var/lib/mysql有一个lost+found目录。 如果我使用非常基本的厨师安装MySQL: package 'mysql-server' 当/var/lib/mysql/lost+found存在时,出现错误: Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details. invoke-rc.d: initscript mysql, action "start" failed. dpkg: error processing package mysql-server-5.7 (–configure): subprocess installed post-installation script returned error exit status 1 dpkg: dependency problems prevent […]

针对特定用户的mysqlconfiguration

是否有可能为特定的linux用户创build不同的mysqlconfiguration(mysql.cnf文件)? 我想提出一个解决scheme,所以当前用户(linux,已经通过身份validation)可以默认访问mysql,而不必使用-u和-p参数。 每个linux用户都已经有了他们的mysql用户,在他们的数据库上设置了适当的权限。 我想要设置的configuration文件的例子。 默认情况下,将使用第一个mysql conf(default.mysql.conf),但是如果其中一个用户; root,www-data或者bob都login了,我想让mysql使用相应的configuration文件。 可以做这个工作吗? default.mysql.conf … [client] # nothing, must authenticate with -u and -p arguments … root.mysql.conf … [client] user = mysqlroot password = AbCdEfG1234pwd … WWW-data.mysql.conf … [client] user = mysqlwwwdata password = AbCdEfG1234wwwpwd … bob.mysql.conf … [client] user = mysqlbob password = AbCdEfG1234bobpwd …

mariadb v15.1不会安装socket / Centos 7

安装CentOS 7新鲜 # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) yum -y install mariadb-server mariadb # mysql -V mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1 /usr/bin/mysql_secure_installation Enter current password for root (enter for none): ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) Enter current password for […]

systemd的mysqld.service – parsing资源值失败,忽略:40000 – LimitMEMLOCK

我得到这个错误的mysql systemd[1]: [/usr/lib/systemd/system/mysqld.service:39] Failed to parse resource value, ignoring: 40000 LimitMEMLOCK mysql systemd[1]: [/usr/lib/systemd/system/mysqld.service:39] Failed to parse resource value, ignoring: 40000 Centos 7与MySQL 5.7当我设置MYSQL 5.7的LimitMEMLOCK限制。 LimitMEMLOCK=40000 为什么不能设置LimitMEMLOCK的数字限制? LimitMEMLOCK的目的是LimitMEMLOCK ? 是唯一LimitMEMLOCK=infinity ? * #cat /etc/*-release CentOS Linux release 7.3.1611 (Core) NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR="0;31" CPE_NAME="cpe:/o:centos:centos:7" HOME_URL="https://www.centos.org/" BUG_REPORT_URL="https://bugs.centos.org/" […]