生命之中的最大错误在于:终日担心犯错误。— 爱尔伯特·哈伯德 (Elbert Hubbard 1856-1915),《笔记》
分页: 1/5 第一页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]
此需求的可能性:

做所有的数据库同步需要很多无用的空间,如果仅仅用到其中一个数据库,那就做一个数据库的同步就足够了。

步骤一 主数据库开通replication用户

按需求不一样名称和密码以及IP不同:
CREATE USER 'slave'@'192.168.1.2' IDENTIFIED BY '***';
GRANT REPLICATION SLAVE ON * . * TO 'slave'@'192.168.1.2' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;


步骤二 取得当前数据备份,备份mysql库和你要的database2

方式1 从master取得

FLUSH TABLES WITH READ LOCK; //锁定所有表
show master status; //取得当前日志点
//打包文件或者是直接导出数据,比停止服务好的地方就是有一段读数据库的时间
unlock tables; //解锁
Tags: ,
今天发现phpMyadmin3.3版本有两个新功能很实用:
1 Synchronize是支持两个数据库同步的操作,这功能挺好的
2 管理replication

不过,同步操作似乎是经过本地web管理的服务器,如果是远端的数据库同步,可能不太合适了,未确认。除非把管理的web端放在数据库的局域网,那样应该挺快。

复制的管理也蛮好,把平时需要输入的命令行给做成点击几下就可以,很方便,这个实用。

phpmyadmin官网下载最新版本吧!
点击这里查看官方关于同步功能的介绍
Tags: ,
mysql的安装目录里有support-files,里面有几份默认的配置
分别是 huge large medium 等,还有高压力的InnoDB的参考:

[root@aslibra support-files]# grep -v ^# my-huge.cnf
key_buffer = 384M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size = 32M
thread_concurrency = 8
Tags:
如果你的服务和我的问题类似,则不妨参考此项做法(只是临时迁移):

A数据库服务是在3306,数据库连接用的是hosts里的名称,要迁移到B数据库,但端口服务是3307
在不改PHP代码的前提下,可以这样:

1 先用iptables设置B服务器的3306端口转发到3307:

iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 3306 -j DNAT --to-destination :3307


这里限制了eth1

2 相应的用户导入,如果不知道用户密码,可以导入相应的mysql/usr表里的相应记录,如果有表权限分配,则比较复杂了,这个多熟悉一下数据库操作才行

3 导出数据并导入,当然了,也需要创建相应的库

mysqldump -S /Data/mysqldb/3306/mysql.sock -uu -pp aslibra >aslibra.sql
mysql -h 192.168.1.8 -P3307 -uu -pp aslibra < aslibra.sql


这里用户是u,密码是p,可以在此服务器访问目标数据库

4 修改hosts相应的记录为B的IP,OK

Tags: ,
案例:

希望增加一台只读的从数据库,已经有主从配置。
这里就不必停止主服务器做主从了,从服务器拷贝一份就直接能够处理。

方法:

先停止从服务器的同步 slave stop
这样,从服务器就是处于一个没有更新的且只读的状态,如果没有inodb类型的,那整个数据库文件夹拷贝一份就可以了,我的配置文件在此文件夹里。
拷贝完毕,执行 slave start 继续同步。

启用另外一台:

把拷贝的那份放另外一个机器上运行,能够正常运行,没有太留意问题。
正常状态应该是在主服务器看到slave的进程的状态是:
引用
Has sent all binlog to slave; waiting for binlog to be updated

比较奇怪的是,我有三台slave,只有两个进程看的到,另外一台的进程看不到。
在另外一台上查看状态是
引用
Queueing master event to the relay log

还非常奇怪,一直都是这个状态,明显可以检查出来,数据更新延后了,半天时间过去了也这样。

问题所在:

想起来配置文件没有修改,server-id是一样的,这个可能是问题。
遂修改所有slave服务器为唯一的id,问题解决。
三个slave的进程都在主服务器进程,状态都是
引用
Has sent all binlog to slave; waiting for binlog to be updated
Tags:
最近在生产环境使用了amoeba,发现一些问题:

1 sql语句不支持,产生大量错误日志
2 有重复执行的迹象,发生数据重复插入到master,还不确定这问题是否amoeba的问题
3 读写分离会在master出现读进程

第二点,就目前的使用情况而言,amoeba还是很稳定的,只是不太清楚是什么问题,如果重复插入数据的问题不是amoeba产生的,那对于应用而言没有错误发生。

对于第一点和第三点,我觉得是这么一个过程:

1 读写分离时会分析sql语句
2 如果语句属于检查范围的则正常进行读写判断,读操作发送到writePool,写操作发送至readPool,未知的sql语句则发送至defaultPool
3 一般defaultPool和写操作是master,所以在master发现select语句很正常,肯定是判断不出来的语句

sql出现的问题比较多,在log里面有找到以下性质的语句错误记录:

1 TRUNCATE TABLE XXX
2 EXPLAIN XXX
3 SELECT * FROM xx FORCE INDEX (xx)
4 insert into xx values('\'test\'') 转义的单引号
5 order by rand()


希望amoeba可以正常运行,不产生第二点错误就很满意了。
对于读操作,使用amoeba肯定是不错。

另外,master重启可能导致主从同步会不太稳定,多个从服务器的话比较长的时间才能稳定下来。
比较经常出现“Queueing master event to the relay log”,slave进程都没有持续,可能导致更新不够及时。

@20100105 补充:以上可能是server-id的问题,参考这里
Tags: ,
1 IP高可用性
可以靠keepalived来维持。

2 web高可用性
可以用proxy服务器的负载均衡分配,一般自带后端检查,可以是nginx,比较流行这个。

3 php运行
可以是fastcgi,也是可以实现负载均衡,能者多劳。

4 mysql
可以使用amoeba或者mysql-proxy,实现读写分离和负载均衡,重要的事情是主从配置和维护。
amoeba-mysql的安装使用和读写分离
Amoeba for Mysql 试用小结

5 数据缓存层
可以用memcached,速度要求低一点的可以用memcachedb,使用magent可以做代理,保持高可用性。
Nginx和memcached/memcachedb配合可以加速可缓存的访问。
memcached和magent的安装
memcachedb的缓存解决方案

6 nginx的proxy性能
可以使用自带的memcache加速,起文件缓存作用。
也许还可以使用同步文件到本地的方式,不经过cache服务器。

7 cache服务器
比如lighttpd+modcache,或者squid、varnish等。新出的modcache可以利用内存缓存,性能估计能高一些,只是用内存缓存居然不支持本地压缩了,需要改为后端处理gzip工作。
lighttpd的mod_cache缓存不了的问题

总体而言
要高可用性,必须有代理层,有了代理层才会解决单点故障。。。
分页: 1/5 第一页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐