先给上一些网址,里面有各种问题与解决
1. httpsqs官方网址
2. python安装与使用mysql
3.mysql插入数据时:Incorrect string value
4.mysql显示中文乱码
5.修改mysql默认编码
6.linux开机以root身份启动一个脚本
注意:一下的操作建议全部以root身份运行,不然会出现很多权限问题。。。很烦恼
其实碰到的问题都是一些小问题,因为自己之前都没接触过,所以记下来,方便以后使用。我想做的大致流程是,现有几个python脚本,python脚本里都含有死循环,然后在shell脚本里执行python脚本,接着开机的时候自动执行这些shell脚本,同时,我还需要将httpsqs服务,redis服务,mysql服务开机自启动,因为我的python脚本里使用到了这些服务,因此这些服务要在我的脚本执行之前先开启
启动httpsqs的命令为:httpsqs -d -l (httpsqs服务地址) -p (httpsqs服务端口) -x (httpsqs数据存放地址)
启动redis服务的命令为:/home/bigdata/redis-2.8.12/src/redis-server /home/bigdata/redis-2.8.12/redis.conf ;其中,/home/bigdata/redis-2.8.12/redis.conf为你的redis服务的配置文件
启动mysql服务的命令为:/etc/rc.d/init.d/mysqld start
在使用mysql的时候,因为我要往数据库里插入中文数据,但是mysql默认编码并不支持中文,因而显示的数据中文部分全是问号,即乱码,查看mysql的默认编码如下(如何查看可以参见 5.修改mysql默认编码)
可以看到默认并不支持中文
我们需要修改默认配置文件,我的时redhat服务器,默认配置文件位于/etc/my.cnf
使用vi编辑器打开此文件,修改如下
注意:文件里面之前没有 [client],我自己加的,因此,如果你的文件里没有那个就自己加上哪个;同时注意,[mysqld]下的为 character-set-server=utf8 而不是像[client]下面一样为 default-character-set=utf8,否则启动 mysql会提示:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)打开日志查看就会发现日志报错为:
mysqld: unknown variable 'default-character-set=utf8'
修改完之后,我们再看看它的默认编码,如下:
修改成功了,但是当我们在代码里往mysql数据库插入中文数据时,问题又来了,如下:
Incorrect string value,详情参见3.mysql插入数据时:Incorrect string value
我的修改后的代码如下:
说明:连接数据库的时候设置连接的编码:charset='utf8'
对于字段时中文的,需要在创建表的时候指定其编码,即代码中创建表里的 author text CHARSET utf8,不过好像如果之前设置了Mysql的默认编码,这步不用也可以。
至此,mysql中文乱码的问题解决了
再来说下httpsqs吧,不知道为什么,突然不能在浏览器里查看队列状态了,使用的时候老碰到这个问题:
以为是httpsqs没开启,原来是httpsqs已经开启了,再使用相同的端口开启时便会报错了,这时我们可以使用命令:pkill httpsqs 杀死httpsqs,再开启这个端口就没问题了,如下:
接下来再说说mysql,运行 mysql -u root -p的时候出现如下错误:
又一个问题:
这里首先要一开始就使用root身份运行,而不要先普通用户,然后再su切换到root运行,具体问题再网上查查。。。
再说下redis,运行redis时出现如下问题:
这是因为redis服务没有开启,开启:/home/bigdata/redis-2.8.12/src/redis-server /home/bigdata/redis-2.8.12/redis.conf 就行了。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
今天使用 redis的时候我想多台电脑连接安装了redis服务的机器,发现在装有redis-server的机器上连接redis-server时,连接的ip要设置为127.0.0.1,不能设置为本机器的ip,否则出现如下问题:
[T:2015-09-23 16:08:49,684|F:URLUnique.py-mfUniqueURL|L:80|L:ERROR]:Traceback (most recent call last): File "URLUnique.py", line 59, in mfUniqueURL if self.m_redisOb.exists(pageMD5) is True: File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 852, in exists return self.execute_command('EXISTS', name) File "/usr/local/lib/python2.7/dist-packages/redis/client.py", line 575, in execute_command connection.send_command(*args) File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 558, in send_command self.send_packed_command(self.pack_command(*args)) File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 534, in send_packed_command self.connect() File "/usr/local/lib/python2.7/dist-packages/redis/connection.py", line 438, in connect raise ConnectionError(self._error_message(e)) ConnectionError: Error 111 connecting to 192.168.11.178:6379. Connection refused.
然而其他机器连接装有redis-server的机器时,连接ip设置为装有redis-server机器的固定ip却能连上。。。
即假设redis-server机器ip为 192.168.11.178,未装redis-server的机器ip为192.168.11.176,那么如果想在192.168.11.178上连接redis-server,则客户端配置的redis连接ip需为127.0.0.1而非 192.168.11.178;若在192.168.11.176上连接192.168.11.178的redis-server,则其客户端redis配置连接ip为192.168.11.178却可以连上
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最后再来说下将这些python代码写入shell脚本然后再随机启动吧
shell脚本代码:
开启各个服务代码(start_service.sh)
服务端代码(start_server.sh)
这里我在每条python代码后面都加了一个 & ,为的是让这条python代码在后台执行,因为这些python脚本里都含有死循环
客户端代码(start_client.sh)
这里每条python指令后面也都有一个&符号,原理与上面类似,同时有个循环,即一次性开启5个
好了,接下来就要把这些shell脚本开机自启动了,最简便的方法便是在/etc/rc.d/rc.local文件里加入启动这些shell脚本的命令,加入之后的文件为:
这里先定位到shell脚本的目录,然后执行shell脚本,每条shell脚本后面也加了一个 &,原理与上面类似
到这里就全部结束了,看下运行结果:
redis结果:
mysql结果
支持中文。。。
最后再提醒下:建议直接使用root身份操作,这样会省去很多麻烦。。。