ubuntu16.04 更改mysql默认数据目录

在 Ubuntu 默认MySQL数据目录是 /var/lib/mysql

现在要将数据目录移到 /server/mysql 做法如下:

#停止MYSQL服务 service mysql stop #复制现有数据目录 cp /var/lib/mysql /server/ #修改MYSQL配置文件将 datadir 对应的值改为 /server/mysql vi /etc/mysql/mysql.conf.d/mysqld.conf #将apparmor中MYSQL配置所有 /var/lib/mysql 改为 /server/mysql vi /etc/apparmor.d/usr.sbin.mysqld #重启appparmor服务 sudo service apparmor restart #重启mysql服务 sudo service mysql start

用myisamchk修复损坏的mysql数据表

数据表被破坏的原因

  最常见的是断电或非法关机造成的数据表索引错误。

修复过程操作步骤简述

1、执行myisamchk --update-state -s *.MYI,检查有哪些索引文件出了问题(可能会化费比较长的时间),注意文件名大小写。update-state选项只有在停止mysqld的时候使用,-s表示忽略一些正常的表列出的信息,只列出错误。
2、对于每一个损坏的表,尝试myisamchk -r -q table_name。这是快速修复模式,会自动检查索引表和数据表是否能够一致。如果一致,则可以修复。
3、如果快速修复模式失败,考虑:myisamchk -r table_name,会删除不一致的数据和索引,并重新构建索引。
4、如果3失败,考虑:myisamchk --safe-recover table_name

  当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次--这通常是上一次修复操作遗留下来的。

这三种修复方法用命令表示如下所示

% myisamchk --recover --quick /path/to/tblName
% myisamchk --recover /path/to/tblName
% myisamchk --safe-recover /path/to/tblName

  第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。

检查和修复MySQL数据文件

  如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:

  如果你怀疑表的索引文件(*.MYI)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.MYD)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblName.MYD)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:

mysql> DELETE FROM tblName;

  在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblName.MYD)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

  如果你的表的格式文件(tblName.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的CREATE TABLE语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

  启动MySQL服务并使用当初的CREATE TABLE文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。

  建议对数据表进行删除或修复操作的时候,备份下相关数据库文件,以备不测。

Linux上不区分mysql表名大小写的修改方法

下载了一个php程序,在windows上运行很正常,可是在linux上运行的时候提示表不存在。

研究了一下:原来是在windows上mysql市不区分表名大小写的,所以很正常。但是在linux上由于mysql默认是却分大小写的,所以程序会出错。

最简单的方法当然是修改linux上mysql的配置文件,修改为忽略大小写就可以了。

修改办法是:

vi /etc/my.cnf

在[mysqld]下加入一行:

lower_case_table_names=1

这句话就表示不区分大小写表名。

重启一下mysql服务再试试看看。

这是最简便的修改办法,但是这种方法也许不是很科学,建议还是写程序的时候就详细规范一下,注意区分大小写。

对!规范才是王道。

转载自:http://www.blogguy.cn/show-452-1.html

Linux下MySQL 5的主从服务器配置

以前只用过,没配置过。今天配了下,原来如此简单。

环境:系统CentOS 6,MYSQL 5.1(据说数据库版本可以不同,但从必须大于等于主)
192.168.1.210 主服务器IP地址 192.168.1.209 从服务器IP地址

第一步:编辑210主配置文件,添加下面代码

[mysqld]
server-id=1 # 输入1-32之间的数字
binlog-do-db=cms # 要同步的数据库
binlog-ignore-db=mysql # 不要同步的数据库

第二步:设置同步数据用的账号和密码
mysql> grant replication slave on *.* to cms@192.168.1.209 identified by '123456';
mysql> flush privileges;
mysql> show master status;
这里记录下File和Position的值,后面配置从数据库会用的到。

第三步:编辑209主配置文件,添加下面代码
[mysqld]
server-id=2 # 输入2-32之间的数字,不能重复
replicate-do-db=cms # 需要同步的数据库
replicate-ignore-db=mysql # 不需要同步的数据库

第四步:设置同步数据用的账号和密码
mysql> change master to
          > master_host='192.168.1.210', # 主服务器IP
          > master_user='cms', # 同步数据库用的账号
          > master_password='123456', # 同步账号的密码
          > master_log_file='cms.000001', # 之前记录的File值
          > master_log_pos=98; # 之前记录的Position值
mysql> start slave;
mysql> show slave status\G
会得到类似下面的列表:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果这两个选项不全是Yes,那就说明你前面某个步骤配置错了。

遇到“Error: 1062 Duplicate entry”错误的话会停止复制操作,可以这样手动解决
mysql> set global sql_slave_skip_counter = 1;
mysql> start slave;
同样的操作可能需要进行多次,也可以设置自动处理此类操作,在从服务器的my.cnf里设置:
slave-skip-errors=1062

到此操作完成,可以测试下看了。注意从服务器是只读的,不可以写入,否则会造成数据错乱。

mysql configure 参数

mysql configure 参数

--prefix=/program/mysql     安装路径
--localstatedir=/var/lib/mysql    数据库文件存放路径
--with-comment=Source   
--with-server-suffix=-Community
--with-mysqld-user=mysql
--without-debug
--with-big-tables
--with-charset=gbk utf8
--with-collation=gbk_chinese_ci   utf8_unicode_ci
--with-extra-charsets=all
--with-pthread
--enable-static
--enable-thread-safe-client
--with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static
--enable-assembler
--without-innodb
--without-isam
--without-ndb-debug
--with-unix-socket-path=/home/mysql/tmp/mysql.sock

仅记录一下,不适用所有版本的MYSQL,自己试着看。至于都啥意思,自己去查吧。

查看MYSQL服务器的mysql.sock的路径命令

查看MYSQL服务器的mysql.sock的路径命令

netstat -nap |grep mysql

一段显示MYSQL数据表注释的代码

<?php
$dbname = "testdb"; // DB名称,数据库连接自己写
$sql = "SHOW TABLES";
$query = mysql_query($sql);
while($info = mysql_fetch_assoc($query)) {
    $table_name = $info['Tables_in_'.$dbname];
    if(substr($table_name, 0, 3) == 'zxy') {
        $sql = "SHOW CREATE TABLE $table_name";
        $query2 = mysql_query($sql);
        $rs = mysql_fetch_assoc($query2);
        $tmp_data = explode("\n", $rs['Create Table']);
        $ext_arr = array();
        foreach($tmp_data as $key=>$value) {
            if(substr($value, 0, 6) == 'CREATE') { // 表头
               
            } else if(substr($value, 0, 2) == '  ') { // 字段
                $field_name = explode('`', $value);
                $field_name = $field_name[1];
                $ext_text = explode('COMMENT', $value);
                $ext_arr[$field_name] = str_replace(array("'", ','), '', $ext_text[1]);
            } else {
                $ext_text = explode('COMMENT', $value);
                $table_desc = str_replace(array("'", ','), '', $ext_text[1]);
            }
        }
        echo '<b>'.$table_name.' - '.str_replace('=', '', $table_desc).'</b>';
        echo '<ul>';
        foreach($ext_arr as $key=>$value) {
            echo '<li>'.$key.' - '.$value.'</li>';
        }
        echo '</ul>';
    }
}
?>

小谈下MySQL的触发器

  最近做东西用到MySQL的触发器,于是乎了解了下这个东西。

  同一台服务器上的两个不同DB中的表,名称为db1中的cdb_threads和db2中的_archives表,要求db1中的表对两个月之内的帖子做添加、修改或删除操作的时候,同时把数据同步到db2中的_archives 表中去。用的是所谓最笨也最安全的方法实现的,据说大数据量操作的时候会一定程度上影响效率,具体我没测试过。这样做,感觉数据库的压力应该会比较大。熟悉DISCUZ的人,从表的名称上很容易可以看出来,这是DISCUZ论坛数据库的主题表,浏览论坛主题的时候,一样会更新这个表里的数据,从一定程度上讲相当于查询次数最少多了两倍。如果同时在线2K以上或更多人的大型论坛,那么这个数字就不是一个小数字了,再加上主题如果已经有海量(上百万)那么多,那么我怀疑可能会很大程度上影响论坛的整体效率,甚至DB会挂掉。废话不多说了,下面是我写的触发器代码。

触发器代码
DELIMITER ;;
CREATE TRIGGER `tg_threads_insert` AFTER INSERT ON `cdb_threads` FOR EACH ROW BEGIN
    SET @stie='1';
    SET @exptime=UNIX_TIMESTAMP()-86400*60;
    INSERT INTO db2._archives(id,subject) SELECT id,subject FROM db1.cdb_threads WHERE tid=NEW.tid AND dateline>@exptime;
    UPDATE db2._archives SET siteid=@stie WHERE id=LAST_INSERT_ID();
END;;
DELIMITER ;

DELIMITER ;;
CREATE TRIGGER `tg_threads_update` AFTER UPDATE ON `cdb_threads` FOR EACH ROW BEGIN
    SET @stie='1';
    SET @exptime=UNIX_TIMESTAMP()-86400*60;
    DELETE FROM db2._archives WHERE tid=OLD.tid AND siteid=@stie;
    INSERT INTO db2._archives(id,subject) SELECT id,subject FROM db1.cdb_threads WHERE tid=NEW.tid AND dateline>@exptime;
    UPDATE db2._archives SET siteid=@stie WHERE id=LAST_INSERT_ID();
END;;
DELIMITER ;

DELIMITER ;;
CREATE TRIGGER `tg_threads_delete` AFTER DELETE ON `cdb_threads` FOR EACH ROW BEGIN
    SET @stie='1';
    DELETE FROM db2._archives WHERE tid=OLD.tid AND siteid=@stie;
END;;
DELIMITER ;

代码仅供参考,如有错误,还望指正。

xampp 1.73 版公布(附下载地址)

[扫盲] XAMPP是什么东西?

  XAMPP是相对LAMP而言的,而LAMP就是所谓的Linux+Apache+MySQL+PHP黄金组合,X代表通用系统,目前包括LINUX系统(在 Ubuntu、SuSE、RedHat、Mandrake 和 Debian 下通过测试),Windows系统(在Windows 98、NT、2000、2003、XP 和 Vista通过测试),Solaris系统(在 Solaris 8 环境下开发并测试),Mac OS X系统等。这些适用的系统以官方公布为准,若发现问题请反馈到官方网站

XAMPP Windows 1.7.3
[基本安装包]
发布日期 2009-12-23
  Apache 2.2.14 (IPv6 enabled), MySQL 5.1.41 + PBXT engine, PHP 5.3.1, OpenSSL 0.9.8l, phpMyAdmin 3.2.4, XAMPP Control Panel 2.5.8, XAMPP CLI Bundle 1.6, Webalizer 2.21-02, Mercury Mail Transport System v4.72, msmtp 1.4.19, FileZilla FTP Server 0.9.33, SQLite 2.8.17, SQLite 3.6.20, ADOdb 5.10, eAccelerator 0.9.6-rc1, Xdebug 2.0.6-dev, Ming 0.4.3.
For Windows 2000, XP, Vista, 7. See also
EXE下载 51 MB 自解压 RAR 压缩包
MD5 checksum: 3635a1c0baf15e8a019009e6c1225389
ZIP下载 100 MB ZIP 压缩包
MD5 checksum: 0fe7f440a7d3af7c06981570f764d246

  以前使用的是Windows下的1.7.1版,Apache的虚拟主机配置总有问题,于是就与之前自己做的一个包混合使用。新版本是否存在同样的问题,还有待验证。更多版本请浏览这里

  测试结果备注

  测试结果不是很令人满意,体积大了不少,但实用的东西基本没有发生什么变化。而且虚拟主机目录的设置问题仍然存在,我没耐心去找寻原因到底出在哪里,如果你找到,可以告知。所以我不推荐大家下载这个庞大的东西了。如果你使用的是Windows系统,推荐下载WampServer套件,最新版本2.0i,关键是这个仅16MB(比我自己打包的那个都要小),而且经测试虚机目录问题也不存在。详细信息参见文章 WampServer安装后的问题(附下载地址)

如何制作绿色软件(以Navicat为例)

  现在什么都流行绿色,不仅包括食品,也包括计算机软件。超市中的食品只要沾上“绿色”两个字,价格嗖的一下子就上去了,那叫一个高啊!而绿色软件,相比之下就不很相同了,因为大多绿色软件都是免费的,相同的一点就是他们都很受欢迎。

绿色软件有什么好处呢?

 第一,它不会在你不知情的情况下,往你系统里装你不想装的东西。反过来讲就是所谓的流氓软件了,流氓软件的存在无疑是帮了它们一个大忙,让人们很容易的就接受了绿色软件。
 第二,它可以在重装系统后,无需任何安装操作即可重新使用(当然这里是说它不与系统装一个盘),这对经常装系统又不喜欢用GHOST盘的人有很大好处;
 第三,可以做成绿色软件的大多是免费软件。当然,这里也可能包含部分破解软件。

  我想这些好处也是它之所以会存在的原因。我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。(注:最后这句话出自Ubuntu中文论坛

那这些东西怎么做出来的呢?

  下面以Navicat 8.2(一款强大的MySQL管理工具)为例简单说下绿色软件的做法。这里需要你准备下面几个东西:

 1. 一个干净的操作系统。所谓干净就是除了系统驱动,基本没装任何其它软件。
 2. Filemon 一个系统文件读写监视工具。下载地址
 3. Editplus 一个比记事本强大的文本编辑器。下载地址
 4. Regmon 一个系统注册表读写监视工具。下载地址  这里用不到它,但你也可以去了解下。

  首先安装Navicat 8.20原程序(Navicat 中文网站),然后把安装好的Navicat 8.20文件夹复制一份到另外的位置“D:\Green\Navicat 8.0 MySQL\”,后面把这个位置成为绿色软件目录。这个时候我们就得到了一份相对安装文件绿色的软件目录,点击主程序,可以正常使用。别高兴太早,因为但它在其他没有安装过它的系统里,并不一定可以用。那么后面我们就要解决它为什么不可以用。

  然后把这个绿色文件夹放到其它比目前更干净的系统中,后面的测试都要在这个系统中进行。打开Filemon程序,并设置过滤关键字为“navicat”,如下图:

大小: 28.28 K
尺寸: 446 x 232
浏览: 0 次
点击浏览全图

  点击OK以后文件读写监视程序开始运行。然后手动去绿色软件目录运行navicat.exe程序,直到它出现下面的错误提示。如果你的系统没有提示,说明你的系统不够干净。

大小: 6.74 K
尺寸: 206 x 132
浏览: 0 次
点击浏览全图

  然后保存Filemon监视程序的日志到Filemon.LOG文件,用Editplus打开这个文本文件(这个要求不是必须的,文件不很大的话,用记事本打开也行)。根据错误提示对话内容“Missing required library files. Application Terminate.”,我们可以了解是丢失了library链接库文件,一般这种文件在WINDOWS里都是用.DLL格式,所以这里我们搜索“DLL    NOT FOUND”关键字(注意:DLL与NOT FOUND之间是TAB,也就是所谓的换位符,不是空格,且必须设置为不区分大小写),很快我们找到下面几个结果(不包括重复的):

D:\Green\Navicat 8.0 MySQL\imm32.dll NOT FOUND
D:\Green\Navicat 8.0 MySQL\winmm.dll NOT FOUND
D:\Green\Navicat 8.0 MySQL\LPK.DLL NOT FOUND
D:\Green\Navicat 8.0 MySQL\USP10.dll NOT FOUND
D:\Green\Navicat 8.0 MySQL\navicat.CHS.DLL NOT FOUND
D:\Green\Navicat 8.0 MySQL\navicat.CH.DLL NOT FOUND
D:\Green\Navicat 8.0 MySQL\olepro32.dll NOT FOUND
D:\Green\Navicat 8.0 MySQL\libmysql_c.dll NOT FOUND
C:\WINDOWS\system32\libmysql_c.dll NOT FOUND
C:\WINDOWS\system\libmysql_c.dll NOT FOUND
C:\WINDOWS\libmysql_c.dll NOT FOUND
C:\WINDOWS\System32\Wbem\libmysql_c.dll NOT FOUND
D:\Green\Navicat 8.0 MySQL\msimg32.dll NOT FOUND

  这些文件都是丢失的吗?别那么早下结论。

  因为系统有个环境变量概念,当某个位置找不到程序需要的文件时,程序会自动寻找其它环境变量标识的位置。所以后面我们要查找后来真正丢失的文件。

  简单数了下,一共有九个文件。那么依次查找这九个文件,即“DLL文件名    SUCCESS”关键字,DLL文件名依次代表这九个文件的文件名称,中间仍然是TAB换位符。这次通过排除SUCCESS的文件,只剩下了三个没找到,它们是分别是:libmysql_c.dll、navicat.CHS.DLL、navicat.CH.DLL这三个文件。其实通过上面的结果,有经验的人已经猜到这个丢失的文件是什么了,它就是“libmysql_c.dll”,而另外两个文件,通过查找的位置判断,是非必须文件或根本不存在的文件。

  下面就简单了,把正常安装后的libmysql_c.dll文件复制一份到程序根目录,这个绿色软件就完成啦!最后就是测试了,把它COPY到不同环境的系统中测试,如果都没有问题,那么说明这个绿软做的比较成功。制作的过程,其实就是一个反复测试的过程,没什么技术含量。若想做所谓的注册破解版,那么就要用到上面提到的Regmon软件了。因为我个人不提倡使用破解软件,所以这里不作详细描述,有兴趣的人就自己去研究吧。

  其它绿色软件的做法大同小异。希望我这篇简陋的文章可以起到抛砖引玉的作用,也希望能有更多的绿色软件制作者为我们广大网友提供服务。只要动手去做,你会发现其实这并不难!