分类
学习笔记

Mysql主从同步备份实现

mysql主从方案主要作用:

读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

发扬不同表引擎的优点。目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好。那么,我们可以使用innodb作为master,处理高并发写入,使用master作为slave,接受查询。或在myisam slave中建立全文索引,解决innodb无全文索引的弱点。

热备,slave和master的数据“准实时”同步。

准备工作。先分别安装两台MYSQL。

配置MASTER

[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/home/mysqldata
log-slow-queries=slow_query.txt
log-bin=mysql-bin197
long_query_time=2
skip-locking
skip-name-resolve
skip-innodb
bind-address=192.168.10.197
max_allowed_packet = 256M
query_cache_size=256M
max_connections=2000
max_connect_errors=10000
key_buffer_size=6000M
read_buffer_size=32M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size=256M
tmp_table_size=512M
old-passwords
interactive_timeout=60
wait_timeout=60
connect_timeout=120
table_cache=8192
thread_cache_size=256
sort_buffer_size=64M
back_log = 500
thread_concurrency=32
server-id=1
log-bin=mysql-bin240
binlog-do-db=phpcmsv9
binlog-ignore-db=mysql
expire_logs_days=10

其中,作为主机,server-id必须为1.

binlog_do_db为需要复制的db。 binlog_ignore_db为忽略复制的db。需要增加DB的话,就增加相应的一行。

重启master数据库,运行检查:

show master status;

#需要看到这样的一行,说明binlog已经开启了: log_bin | ON

在master上为slave建立用户

grant replication slave, reload, super on *.* to ‘backup’@’%’ identified by ‘xxxx’;

主机配置完毕。

配置slave

[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/home/mysqldata
log-slow-queries=slow_query.txt
log-bin=mysql-bin198
long_query_time=2
skip-locking
bind-address=192.168.10.198
skip-name-resolve
skip-innodb
max_allowed_packet = 256M
query_cache_size=256M
max_connections=2000
max_connect_errors=10000
key_buffer_size=6000M
read_buffer_size=32M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size=256M
tmp_table_size=512M
old-passwords
interactive_timeout=60
wait_timeout=60
connect_timeout=120
table_cache=8192
thread_cache_size=256
sort_buffer_size=64M
back_log = 500
thread_concurrency=8
server-id=2
replicate-do-db=phpcmsv9
replicate-ignore-db=mysql
expire_logs_days=10

1.启动主服务器和从服务器服务,在从服务器192.168.17.2上使用命令slave start启动复制;

2.使用命令show slave status;

以前版本mysql从设置要在ini文件上,现在版本命令行设置即可,从服务器根据master的log id 直接这样设置。

change master to master_host=’127.0.0.1′, master_user=’backup’, master_password=’xxxx’, master_log_file=’mysql-bin.000032′, master_log_pos=727525;

互为主从就可以实现双向同步。

show slave status; 出现两个YES就好了。

Slave_IO_State   Waiting for master to send event

 

分类
学习笔记

nginx 支持thinkphp 的 PATH_INFO

nginx :  /usr/local/nginx/

php   :  /usr/local/php/

网站根目录: /usr/local/nginx/html/

修改后支持thinkphp的内容:

user  nobody;
worker_processes  1;
error_log  logs/error.log  info;
pid        logs/nginx.pid;
events {
    use epoll;
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  logs/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
                                                                                                                              
    gzip on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.0;
    gzip_comp_level 2;
    gzip_types       text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.php index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~ \.php {                   #去掉后面的$
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_split_path_info ^(.+\.php)(.*)$;                             #增加这一句
             fastcgi_param PATH_INFO $fastcgi_path_info;                          #还有这一句
             fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;  # 这个是在配置nginx+php整合的时候就改好的$前面的是网站的主目录
             include        fastcgi_params;
        }
        if (!-e $request_filename)
            {
            #地址作为将参数rewrite到index.php上。
             rewrite ^/(.*)$ /index.php/$1;
            #   若是子目录则使用下面这句,将subdir改成目录名称即可。
            # rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
            #    }
            }
    }
server {
        listen       80;
        server_name  s.abc.org;
        location / {
            root   html;
            index  index.html index.htm;
        }
        location /status {
            stub_status on;
            access_log   on;
            allow 192.168.80.0/24;
        }
    }
}

分类
学习笔记

php 5.4中php-fpm 的重启、终止操作命令

php 5.4中php-fpm 的重启、终止操作命令:

查看php运行目录命令:
which php
/usr/bin/php

查看php-fpm进程数:
ps aux | grep -c php-fpm

查看运行内存
/usr/bin/php  -i|grep mem

重启php-fpm
/etc/init.d/php-fpm restart

在phpinfo()输出内容可以看到php相关配置。
Loaded Configuration File /etc/php.ini

==============================

首先要找到php-fpm.conf配置文件,查看pid的配置路径(不是安装路径),然后把下面对应的地方改掉才能正常执行。

[[email protected] ~]# ps aux | grep php-fpm 
root     11799  0.0  0.0 103248   880 pts/0    S+   13:51   0:00 grep –color php-fpm
root     11973  0.0  0.0 417748   964 ?        Ss   Jun01   0:20 php-fpm: master process (/etc/php-fpm.conf)

cat /etc/php-fpm.conf
看到
pid = /var/run/php-fpm/php-fpm.pid

php-fpm 启动:
/usr/local/php/sbin/php-fpm
php-fpm 关闭:
kill -INT `cat /var/run/php-fpm/php-fpm.pid`
php-fpm 重启:
kill -USR2 `cat /var/run/php-fpm/php-fpm.pid`

查看php-fpm进程数:
ps aux | grep -c php-fpm

=============================

[[email protected] ~]# find / -name ‘php-fpm’ -type d
/var/log/php-fpm
/var/run/php-fpm

用这个find命令查找出来的路径是不对的

which php
/usr/bin/php

分类
学习笔记

Ubuntu修改locale把语言环境变量改为英文

==把语言环境变量改为英文==

将Ubuntu系统语言环境改为英文的en_US.UTF-8 查看当前系统语言环境

locale

编辑配置文件,将zh_US.UTF-8改为en_US.UTF-8,zh改为en

sudo nano /etc/default/locale
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"

继续查看更改后的系统语言变量,如果出现下列错误,说明没安装en_US的local

[email protected]:~$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

查看系统内安装的locale

[email protected]:~$ locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory
C
POSIX
zh_CN.utf8
zh_SG.utf8

看吧,没装en_US.UTF-8 安装en_US.UTF-8

sudo locale-gen en_US.UTF-8

再次查看,应该一切正常了。

[email protected]:/usr/share/locales$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
分类
学习笔记

在Ubuntu安装完成后更改默认的语言LANG,出现Cannot set LC_CTYPE to default locale: No such file or directory错误的解决办法

在安装ubuntu的时候选了中文,但后来发现SVN客户端需要utf8来支持中文。

于是修改 /etc/default/locale为:

LANG=”en_US.UTF-8″
LANGUAGE=”en_US:en”

但是,后来perl, locale,export LANG=en_US.UTF-8之类的命令都出现warning:

> locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=”en_US.UTF-8″
LC_NUMERIC=”en_US.UTF-8″
LC_TIME=”en_US.UTF-8″
LC_COLLATE=”en_US.UTF-8″
LC_MONETARY=”en_US.UTF-8″
LC_MESSAGES=”en_US.UTF-8″
LC_PAPER=”en_US.UTF-8″
LC_NAME=”en_US.UTF-8″
LC_ADDRESS=”en_US.UTF-8″
LC_TELEPHONE=”en_US.UTF-8″
LC_MEASUREMENT=”en_US.UTF-8″
LC_IDENTIFICATION=”en_US.UTF-8″
LC_ALL=

解决办法:

locale-gen en_US.UTF-8

如果Ubuntu Server在安装过程中,选择的是中文(很多新手都会在安装时选择中文,便于上手),这样在完成安装后,系统默认的语言将会是中文zh_CN.UTF- 8。但问题是我们安装的是服务器,只需要运行命令行终端,但在终端下无法正常的显示默认中文编码zh_CN.UTF-8。

可以有三种方法解决该问题,分别详细介绍如下。

第一种:安装zhcon软件包
$ sudo apt-get install zhcon
即可将zhcon软件包安装上,它其实就相当于一个Ubuntu的UC-DOS程序,是一个汉字外挂。既然是外挂就必然要占用一定的系统资源,根据实际需求可选用该方法。

第二种:使用putty、securteCRT等虚拟终端软件
直接修改虚拟终端界面配置项目中的字体编码为UTF-8即可。其实就是仍然采用了Ubuntu Server默认的zh_CN.UTF-8汉字编码,但在虚拟终端中经过“编码修正”后正确显示出来,因为Windows系统下是采用GBK作为系统默认 编码的,故在Windows下,无论是虚拟机,还是默认的虚拟终端界面,显示汉字都是乱码或菱形符号。该方法使用较广,但在实际终端下,仍然无法正常显示 汉字,因为此时系统的默认编码还是zh_CN.UTF-8,服务器上的实际终端还是不能认识zh_CN.UTF-8这种编码。故引出第三种方法。

第三种:修改Ubuntu的配置文件/etc/default/locale
将原来的配置内容修改为
LANG=”en_US.UTF-8″
LANGUAGE=”en_US:en”
再在终端下运行:
$ locale-gen -en_US:en
注销或重启后,Ubuntu Server真正服务器实体终端就恢复成了英文的语言环境。
所以,此方法不是真正意义上的中文化,而是恢复英文的默认编码