Browsed by
分类:Database

MariaDB初步

MariaDB初步

基本上与mysql数据库是完全兼容的,各项命令以及库的名字都与mysql相同。当然目前还没有深度应用,不知道在库、api等方面是否完全兼容。

启动数据库:

service mysql start

修改root用户密码:

mysqladmin -u root password "xxxx"

将数据库加入自动启动列表:

chkconfig --add mysql            <-- Redhat/CentOS/openSUSe
或者 update-rc.d mysql defaults   <-- Debian/Ubuntu

访问数据库:

mysql -u root -p
定时自动备份MySQL数据库

定时自动备份MySQL数据库

网上搜索的一些文章或者脚本, 在Ubuntu/Kubuntu中似乎都有这样或者那样的问题, 经过一番摸索后, 以下方式是可行的.

step1: 创建定时任务, 例如在早上1:30备份数据库. 编辑/etc/crontab文件, 添加内容:

30 1    * * *   root    sh  /home/yxh/cronDayBackupMySQL.sh

step2: 创建shell脚本cronDayBackupMySQL.sh. 要非常注意脚本中的标点符号(不得不说, shell脚本是怪折磨人的)

#!/bin/bash
currDateStr=`date +%Y%m%d`
mysqlBackFileName=mysql${currDateStr}
mysqldump -u root -p db_yxh --password=1234 | gzip > /var/backups/$mysqlBackFileName.sql.gz

其中, 数据库是db_yxh, 数据库root用户密码是1234, 备份的sql文件压缩存放在/var/backups目录下.

解压缩gz文件也很简单, 直接试用gzip即可:

gzip -d xxx.gz

 

sqlite3记录的唯一标识

sqlite3记录的唯一标识

与Oracle类似,sqlite3提供了内置的ROWID项用于返回每条记录的ID。例如,下面的sql语句可以返回数据项及对应的ROWID:

select ROWID, groupID, description from tbl_hunting_group;

关于ROWID的细节信息,可以参考官方的说明文档:

http://www.sqlite.org/autoinc.html

修改MySQL表中字段的缺省值

修改MySQL表中字段的缺省值

网上搜了一下,居然有推荐“先删除字段,再重新添加字段”的做法。如果该字段原来有一些非缺省值的记录,岂不是就丢失了吗? 这真是一点都没有爱啊。

比较有爱的做法是:使用MySQL提供的alter table语句对字段直接进行修改。

例如对tbl_local_users表中的moMaxCalls字段修改缺省值为1,可以采用以下语句:

alter table tbl_local_users modify moMaxCalls int default 1;
MySQL与幻象读

MySQL与幻象读

最近在部署系统的过程中,发现MySQL的一点问题,进行简单总结。

实际上就是关于事务隔离级别以及幻象读的问题。

我们的程序分成两个部分:UI层以及Service处理层。UI层使用MySQL的C库接口创建连接;Service层采用Python的MySQLdb您(底层仍然是MySQL的C接口)创建连接。

因此,实际上会与MySQL创建两个连接。

在windows环境中,如果我们通过UI修改了MySQL的数据,我们发现在service层查询时,还是以前的数据,而不是commit之后的数据。

采用Ubuntu系统下的MySQL时,没有这个问题。UI修改了MySQL数据后,Service能立刻查询到最新的结果。

我们发现,Ubuntu下的MySQL(5.1.49-1ubuntu8.1 (Ubuntu))版本较旧,采用MyISAM引擎。而Windows环境下的MySQL(5.1.53-community MySQL Community Server (GPL))较新,采用InnoDB引擎。将Windows环境下的MySQL强制指定为MyISAM时,问题也能解决,不再出现幻象读。

使用下述命令查询了Ubuntu和Windows的配置,都是REPEATABLE-READ:

SELECT @@tx_isolation;

SELECT @@global.tx_isolation;

判断,InnoDB的事务处理级别REPEATABLE-READ还是会出现幻象读。在程序中强行将session级的处理修改为READ-COMMITTED后,问题也解决,不再出现幻象读。

set session transaction isolation level read committed;

这个似乎与网上的资料有些不一致,据说REPEATABLE-READ不会出现幻象读,而READ-COMMITTED级别才会出现。实际结果是相反的。

另外,就我们的应用来说,select操作多于insert/update操作,而且数据量不大,因此MyISAM比InnoDB更适合我们的应用,可惜高版本的MySQL将缺省引擎给换成InnoDB了。

MySQL 5.5.8安装过程中的小问题

MySQL 5.5.8安装过程中的小问题

德国的一个客户反馈callingCard业务有点问题,查了半天,没找到原因。在我们的环境上一切都很正常,而在他的环境上,很容易就失败了。我们推测是不是MySQL数据库不匹配?因此决定也安装最新的MySQL 5.5.8版本测试一下。

按照以往的惯例,我们在安装时指定允许root从远端接入数据库。可是在最后的配置过程中,总是提示失败,是某个field没有default value。

这确实很奇怪啊,以往从来没有遇到这样的问题。我们重新卸载、安装,此时不再允许root从远端接入数据库,则配置过程一切正常。

5.5.8版本和以前有另外一个不一样的地方,在windows的程序启动菜单中,没有了命令行窗口的快捷方式了。需要手工打开dos窗口,然后进入MySQL安装目录下的bin子目录,运行mysql -u root -p来登录MySQL数据库。

号称5.5.8比前任版本在各方面有极大的飞跃,这个我们不得而知。不过,在我们的环境中,切换到5.5.8环境后,结果仍然是正常,开起来客户的问题可能是其他方面的啊。

远程访问MySQL数据库

远程访问MySQL数据库

Linux版本的MySQL数据库缺省不允许从远程访问(Windows版本在安装时可以进行选择),因此我们需要简单修改一下来放开这个限制。

通过软件中心安装MySQL,这没有什么好介绍的。网上有些这方面的介绍,不过中文版本的基本上都有些错误,估计大部分都只是转载,作者并没有真正尝试。

以下步骤基于Ubuntu版本。

step1:mysql> grant all privileges on *.* to 'root'@'%' identified by '1234';

其中,‘1234’是指密码,‘root‘是指远程访问的账户名。’%’是指允许从任何一个远程计算机访问。’*.*’是指所有数据库、所有表。

step2:mysql> flush privileges;

step3:修改/etc/mysql/my.cnf文件,注释掉以下行:

bind-address     = 127.0.0.1

step4: 重启MySQL服务

sudo service mysql restart

完成上述步骤后,就可以用root账户,以‘1234’为password,从任何一个远端计算机上登录并访问MySQL数据库了。

MySQL查询结果中去掉重复的值

MySQL查询结果中去掉重复的值

一个简单的应用,查询数据库中的用户名,同时去掉其他重名的用户。测试数据库如下:

mysql> select name from demo;
+———+
| name    |
+———+
| yxh     |
| yxh     |
| default |
+———+

查询时,只要限定关键词‘distinct’即可,例如:

mysql> select distinct name from demo where name != ‘default’;
+——+
| name |
+——+
| yxh  |
+——+
1 row in set (0.02 sec)

MySQL一二三

MySQL一二三

开始使用MySQL

以下操作基于Fedora系统:

检查系统中是否已经安装了mysql相关的包:
rpm -qa |grep mysql -i

初始化数据库
/usr/bin/mysql_install_db

启动数据库
service mysqld restart

修改用户密码(需要先启动数据库):
mysqladmin -u root password ‘12344321’

登陆数据库
mysql -u root -p
系统提示会提示输入密码。

数据库目录:/var/lib/mysql
配置文件: /usr/share/mysql

在Ubuntu系统中,安装和使用MySQL也非常简单:

(1)安装MySQL

sudo apt-get install mysql-server

安装完成后,Ubuntu会弹出简单的对话框配置root的口令。

(2)启动(重启动)MySQL

sudo service mysql restart