Browsed by
Author: YI

远程访问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数据库了。

2018-09-29 更新, Debian 9之后又有了很多变化:

最大的变化莫过于MariaDB正式替换了MySQL,当然mariadb的各项操作、库(尤其是基本的操作和基本库)与MySQL还是保持兼容。同时,配置文件变更为 /etc/mysql/mariadb.conf.d/50-server.cnf。

在完成上述那些操作后,在其他用户的shell里,使用root账号登录MariaDB,会提示以下信息:

ERROR 1698 (28000): Access denied for user ‘root’@’localhost’

而直接在root用户的shell里登录是没有问题的。这种情况下,root要登录进MariaDB后,选择“mysql”数据库,然后

update user set password=password('1234') where user='root' and host='localhost';

此时设置从本机登录时,root用户的密码。

update user set plugin='' where user='root';
flush privileges;

清除root用户的plugin字段,允许root用户从其他shell里登录。

另外要注意的是,重新启动MariaDB,命令也有变换,采用 systemctl 进行操作:

systemctl stop mariadb.service
systemctl start mariadb.service
VMware player真不错

VMware player真不错

以前一直是使用VirtualBox来运行linux操作系统。原因很简单,virtualBox(简称VB)是免费的,而且功能也很不错,基本满足了我们的要求。

前几天发现VMware居然有一款VMware Player产品(简称VMP),而且从介绍看,它不仅仅是个player,它也能创建虚拟机。这可真不错。下载来试试,感觉比VB要好用些。

最让人称道的是,VMP比VB占用的内存要少得多,速度也快得多,除了系统安装以及启动那会儿,基本上客户机运行时,对主机影响不太大。主机上的各项操作仍然很流畅,而运行VB时,主机是明显受到来影响,各项操作都比较慢。

另外,VMP中的shared folder比VB的数据空间要好用些。客户机系统run起来后就能直接在/mnt目录下使用来,而VB的数据空间要进行人工进行mount(当然,也可以修改配置文件,在系统启动时mount)。相比之下,shared folder好用很多。

使用几天后,感觉很满意。将VB卸掉,换成VMP了。

通信协议与字节序问题

通信协议与字节序问题

传统的通信协议通常采用字节序进行定义,与现代的VOIP协议采用文本方式定义截然相反。采用字节序方式的优点是效率高、节省空间,但是也引入了很多的问题,其中最普遍的就是big endian和little endian的问题。

x86CPU采用little endian字节序,而power系列采用big endian字节序。little endian是低地址存放最低有效字节,而big endian是指低地址存放最高有效地址。通常又把big endian称为网络字节序。
big endian比较符合人类的思维习惯,例如数字0x12345678在CPU中的存储顺序如下:

Big Endian

低地址                                             高地址
—————————————–>
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      12      |       34     |      56       |      78     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Little Endian

低地址                                             高地址
—————————————–>
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      78      |       56     |      34       |      12     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

在通信协议中,往往采用Big endian定义。

在通信协议设计时,位域的定义也有这个顺序的问题。另外,对16/32位整数,也需要注意进行主机字节序和网络字节序的转换。

下面以RTP协议的一个定义为例:

相应的C代码定义为:
struct RTPHeader
{
#ifdef RTP_BIG_ENDIAN
uint8_t version:2;
uint8_t padding:1;
uint8_t extension:1;
uint8_t csrccount:4;
uint8_t marker:1;

uint8_t payloadtype:7;

#else // little endian
uint8_t csrccount:4;
uint8_t extension:1;
uint8_t padding:1;
uint8_t version:2;

uint8_t payloadtype:7;
uint8_t marker:1;
#endif // RTP_BIG_ENDIAN

uint16_t sequencenumber;
uint32_t timestamp;
uint32_t ssrc;
};

其中,sequencenumber,timestamp,ssrc在发送和接收时,需做字节序转换。C语言中,常用函数为:htons,htonl,ntohl,ntohs。

linux系统产生UUID的方法

linux系统产生UUID的方法

1 #include <stdio.h>
2 #include <time.h>
3 #include <stdlib.h>
4 #include <uuid/uuid.h>
5
6 void display_uuid(uuid_t uu)
7 {
8     int i=0;
9     for(i=0; i<16; i++)
10     {
11         printf(“%02x”, uu[i]);
12     }
13
14     printf(“\n”);
15 }
16
17 int main()
18 {
19     uuid_t uu1, uu2;
20
21     uuid_generate(uu1);
22
23     uuid_generate(uu2);
24
25     display_uuid(uu1);
26
27     display_uuid(uu2);
28
29     int result = uuid_compare(uu1, uu2);
30
31     printf(“result = %d\n”, result);
32
33     return 1;
34 }
编译命令:gcc demo.c -luuid
人格分裂

人格分裂

今天在天涯無意中看到一個影評的帖子,看標題就很感興趣,於是點進去看了。花了大約1個半小時。。。

主題本身其實沒有特別的地方,沒有留下太深的印象。讓人瞠目結舌的是這個帖子的各種回帖,華麗啊。人身攻擊有之、謾駡有之、玩深沉有之、玩高雅有之、還有玩儅老師的,詞鋒或犀利、或婉轉、或橫眉、或威脅,實在是太精彩了。最精彩的是,到了最後兩派人互相揭馬甲,人肉搜索。我以為我看了一個半小時的戲劇,結果發現最後其實是雙口相聲,搞不好還是單口相聲!

我被這種人格分裂的現場震撼了,我現在才明白原來駡人、回帖可以如此的詭異、惡毒,難道是我已經out了?天涯真是個鬼魅般的存在。

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)

Ubuntu 10.10发布了

Ubuntu 10.10发布了

刚才在cnbeta中看到了这个消息,感觉有点兴奋,很想知道10.10会是什么样的一个版本?是不是会带来更多的惊喜?我对ubuntu还是比较期待的,虽然同时我也比较纠结Fedora。

在ubuntu中,点击“update manager”开始check,居然没有提示升级到10.10,只是提示了几个小软件的升级。这是怎么回事?

点击”update manager”的setting按钮,检查各项配置。将release upgrade修改为”normal release”后,再进行check,提示可以升级到10.10版本了。

这就带来疑问:10.10不是LTS版本?10.04才是LTS版本,下一个LTS版本应该是11.04。

如果是这样的话,就没有太大必要着急升级到10.10。当然,潮流人士可以升级试试。

X-lite 4慢了很多

X-lite 4慢了很多

今天从xten网站上下载了最新的Xlite4,安装后感觉界面确实华丽了很多。

可是启动速度、运行速度相应也慢了很多!进到xlite的安装目录看了看,感觉xten用.net重写了xlite。.net固然很方便开发,可是我仍然觉得采用.net开发SIP客户端是个败笔,对系统要求太高了,体验不太好。

linux下的定时备份

linux下的定时备份

这个问题实际包含两个部分:

(1)创建定时任务

(2)备份数据

备份数据的命令为:rsync 例如,rsync -a /var/svn_db/ /home/backup/svn_db/

创建定时任务的命令为:crontab,例如:crontab -u root -e 编辑root用户的定时任务。此时会自动打开一个vi进行编辑, vi文件的格式为:M H D m d cmd

其中:
M: 分钟(0-59)。
H:小时(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0 表示星期天)

其中:M: 分钟(0-59)。 H:小时(0-23)。 D:天(1-31)。 m: 月(1-12)。 d: 一星期内的天(0~6,0 表示星期天)除了数字还有几个个特殊的符号就是”*”、”/”和”-“、”,”,*代表所有的取值范围内的数字,”/”代表每的意思,”*/5″表示每5个单位,”-“代表从某个数字到某个数字,”,”分开几个离散的数字。

我们的目标是创建一个定时任务,每天晚上23点开始备份数据,因此输入信息:

* 23 * * * rsync -a /var/SVN_DB/ /home/backup/svn_db/

vi保存退出后,系统会在/var/spool/cron目录下创建一个与用户名同名的文件。定时备份任务就启动了。