免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2387 | 回复: 0
打印 上一主题 下一主题

Mysql数据库数据同步+PHP session共享 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-30 23:16 |只看该作者 |倒序浏览
好好学习,天天向上。Mysql数据库数据同步+PHP session共享 这两项技术个人认为在服务器群集或者squid、nginx反向代理负载均衡非常关键,Mysql数据库单向同步也就成了Mysql数据库热备份了,非常不错的技术,PHP session共享发费我最长的时间了,大概弄了半个多月,终于实验成功,因为最讨厌Linux服务器上一些软件依赖关系,没有自己去编译,都用的apt-get install 安装这些相关软件,并且用的是Ubuntu系统。
Mysql数据库数据同步
原理:mysql数据库数据同步是通过日志来同步的,对数据库的操作都会记录在日志里面,然后系统根据这些操作日志同步数据库数据。具体的可以百度下。
ServA:192.168.1.204
ServB:192.168.1.80
配置同步账号
在ServA上增加一个ServB可以登录的帐号:
Mysql>GRANT all privileges ON *.* TO backup@'192.168.1.80' IDENTIFIED BY '123456';
Mysql>create database sam;
在ServB上增加一个ServA可以登录的帐号:
Mysql>GRANT all privileges ON *.* TO backup@'192.168.1.204' IDENTIFIED BY '123456';
Mysql>create database sam;
ServA:
vim /etc/mysql/my.cnf
[mysqld]下面加入:
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog-do-db=sam
binlog-ignore-db=mysql
replicate-do-db=sam
replicate-ignore-db=mysql
master-host=192.168.1.80
master-user=backup
master-password=123456
master-port=3306
master-connect-retry=30
ServB:
vim /etc/mysql/my.cnf
[mysqld]下面加入:
server-id               = 2
log_bin                        = /var/log/mysql/mysql-bin.log
replicate-do-db=sam
binlog-ignore-db=mysql
replicate-do-db=sam
replicate-ignore-db=mysql
master-host=192.168.1.204
master-user=backup
master-password=123456
master-port=3306
master-connect-retry=30
配置好了配置文件还要执行以下命令搭建起桥梁。
主服务器的日志表名字查询:
show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000012 |      369 | sam          | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
从服务器:
mysql>slave stop;
mysql>CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000012',MASTER_LOG_POS=369;
mysql>slave start;
mysql>show slave status\G;
如果看到下面的,就说明已经可以数据库同步了。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果slave start; 不了,用
change master to master_host='192.168.1.80',master_user='backup',
master_password='123456',master_log_file='mysql2-bin.000001' ,master_log_pos=98;
PHP session共享
原理:反向代理负载均衡最能体现为什么要共享,比如开始在A服务器用你的帐号密码登录了,如果A服务器压力大了,系统会安排你和B服务器通讯,这时你的session就会没有了,因为你没有在B服务器登录过,所有你必须重新登录,PHP session共享就可以解决这个问题,因为他相当一个容器把所有的session全部存到里面,然后读取的时候每台服务器都可以去读取。可能我说的不够清楚,具体的也可以百度下。
操作系统:ubuntu
web1 : apache2   IP:192.168.1.201
web2 : apache2   IP:192.168.1.80
PHP Version 5.2.6
web1 :
apt-get install memcached php5-memcache libevent1
vim /etc/php5/apache2/conf.d/memcache.ini
; uncomment the next line to enable the module
extension=memcache.so
memcache.dbpath="/var/lib/memcache"
memcache.maxreclevel=0
memcache.maxfiles=0
memcache.archivememlim=0
memcache.maxfilesize=0
memcache.maxratio=0
vim /etc/php5/apache2/php.ini
最后加入:
extension=memcache.so
session.save_handler = memcache
session.save_path = "tcp://192.168.1.201:11211"
以下方法没测试过,自己可以测试下:
使用多个 memcached server 时用逗号","隔开
也可以在 .htaccess :
php_value session.save_handler "memcache"
php_value session.save_path  "tcp://192.168.1.105:11211"
再或者在某个一个应用中:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://192.168.1.105:11211");
vim /etc/memcached.conf
-l 127.0.0.1 改成 -l 192.168.1.201
重启两个服务:
/etc/init.d/apache2 restart
/etc/init.d/memcached restart
web2 :
apt-get install php5-memcache libevent1
vim /etc/php5/apache2/conf.d/memcache.ini
; uncomment the next line to enable the module
extension=memcache.so
memcache.dbpath="/var/lib/memcache"
memcache.maxreclevel=0
memcache.maxfiles=0
memcache.archivememlim=0
memcache.maxfilesize=0
memcache.maxratio=0
vim /etc/php5/apache2/php.ini
最后加入:
extension=memcache.so
session.save_handler = memcache
session.save_path = "tcp://192.168.1.201:11211"
重启两个服务:
/etc/init.d/apache2 restart
最后就是PHP Session测试.
test.php 测试完注销后,请关闭浏览器重新打开浏览器测试!
session_start();
$expired = false;
$action = $_GET['action'];
$adm_user = $_POST['adm_user'];
$adm_pass = $_POST['adm_pass'];
if ($_SESSION['current_session'] != $_SESSION['user']."=".$_SESSION['session_key']) $expired = true;
if ($action == "logout")
{
    $_SESSION['current_session'] = rand(100,9000000);
    $_SESSION['curr_sess_iden'] = rand(100,9000000);
    $_SESSION['session_user'] = "Logged out";
    $_SESSION['session_key'] = rand(100,9000000);
    $expired = true;
}
if ($_POST['login'] != '')
{
    if ($adm_user != 'admin' || $adm_pass !='admin') {
        echo "登陆失败: 用户名或密码错误!
";
        $expired = TRUE;
    }
    else
    {
        $time_started = md5(mktime());
        $secure_session_user = md5($adm_user.$adm_pass);
        $_SESSION['user'] = $adm_user;
        $_SESSION['session_key'] = $time_started.$secure_session_user.session_id();
        $_SESSION['current_session'] = $adm_user."=".$_SESSION['session_key'];
        $expired = FALSE;
    }
}
?>




用户登陆-204


if ($expired) {
?>

   
     
      用户名
      
     
     
      密码
      
     
   
   

    die();
}else{
       echo "登陆成功!
";
       echo "当前会话:
".$_SESSION['current_session']."
";
       echo "注销";
}
?>



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/75716/showart_2013818.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP