1.安装必须的几个工具

yum install python-devel # 开发版包含python.h头文件
yum install epel-release # 安装setputools工具 centos默认没有
yum install python-setuptools # 安装setputools工具
easy_install pip # 安装强大的pip
pip install virtualenv #安装虚拟环境
pip install supervisor #安装supervisor

2.在虚拟机中安装flask
cd /www/shop
vim shop.py # 一下内容

from flask import Flask
app = Flask(__name__)
@app.route(‘/’)
def index():
return ‘hello world’
if __name__ == ‘__main__’:
app.debug = True
app.run()

安装环境 flask是在虚拟机中安装的
virtualenv venv
source venv/bin/activate

pip install flask
pip install gunicorn

3.配置supervisor

echo_supervisord_conf > /etc/supervisord.conf

supervisord -c /etc/supervisord.conf

ps aux | grep supervisord

vi /etc/supervisord.conf 最后两行改为

[include]
files = /etc/supervisor/*.conf
vim /etc/supervisor/shop.conf 适当修改

[program:shop]
command=/www/shop/venv/bin/gunicorn -w4 -b0.0.0.0:8001 shop:app
;numprocs=1
;process_name=%(program_name)s
directory=/www/shop
user=root
autorestart=true
redirect_stderr=true
stdout_logfile = /www/shop/log/info.log
loglevel=info
supervisorctl reload 重载配置
supervisorctl status 查看状态

4.配置nginx
新建nginx配置文件 /usr/local/nginx/conf/vhost/shop.conf

server {

listen 80;
server_name yourdomain.com;

root /www/shop;

location / {
proxy_pass http://127.0.0.1:8001; #gunicorn对应的端口
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}
保存后测试配置并重启nginx配置
/usr/local/nginx/sbin/nginx -t
/etc/init.d/nginx reload
直接下载看:部署flask项目

在supervisor默认配置中,其启动的sock等都会放到tmp目录,而tmp目录会自动清理导致无法使用supervisorctl命令,此时:

修改supervisor.conf文件,修改到/var/run/及/var/log/目录,具体配置就不进行贴了,简单直接搜索tmp进行修改即可。
重启supervisor服务,记得kill原来服务。

来自:http://blog.csdn.net/binggoogle/article/details/70820966

MySQL报错 Lock wait timeout exceeded; try restarting transaction
1,查看数据库的隔离级别:

mysql> select @@tx_isolation;
+—————–+
| @@tx_isolation |
+—————–+
| READ-COMMITTED |
+—————–+
1 row in set (0.00 sec)
2,去查看先当前库的线程情况:
mysql> show full processlist;

没有看到正在执行的慢SQL记录线程,再去查看innodb的事务表INNODB_TRX,看下里面是否有正在锁定的事务线程,看看ID是否在show full processlist里面的sleep线程中,如果是,就证明这个sleep的线程事务一直没有commit或者rollback而是卡住了,我们需要手动kill掉。

mysql> SELECT * FROM information_schema.INNODB_TRX;

3,看到有两条记录,然后找到 trx_mysql_thread_id
mysql> SELECT trx_mysql_thread_id FROM information_schema.INNODB_TRX;

mysql> kill 7226287;
Query OK, 0 rows affected (0.00 sec)

mysql> kill 5201247;
Query OK, 0 rows affected (0.00 sec)

然后再去查询INNODB_TRX表,就没有阻塞的事务sleep线程存在了,如下所示:
mysql> SELECT * FROM information_schema.INNODB_TRX;

再去执行update语句,就能正常执行了,如下所示:
4,总结分析
表数据量也不大,按照普通的情况来说,简单的update应该不会造成阻塞的,mysql都是autocommit,不会出现update卡住的情况,去查看下autocommit的值。
mysql> select @@autocommit;
+————–+
| @@autocommit |
+————–+
| 1 |
+————–+
1 row in set (0.00 sec)

如果是0的话 就设置为1 set global autocommit=1;