- 浏览: 589974 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
kangh:
转载的也拿出来 都不试一下 完全错误
Nginx+ffmpeg的HLS开源服务器搭建配置及开发详解 -
wangtxlz:
#cd builders/cmake#cmake .系统提示命 ...
crtmpserver流媒体服务器的介绍与搭建 -
hnraysir:
支持支持支持
手机Android音视频采集与直播推送,实现单兵、移动监控类应用 -
wuent:
把web服务器和php框架绑定到一起?真不建议这样。。。
Swoole(PHP高级Web开发框架) -
wuent:
有更详细的性能比较吗?php,python,java
PHP中的(伪)多线程与多进程
操作系统:CentOS 5.8
MySQL版本:5.5.x
原来状况:数据库在一台机器上,已经有一些生产数据
目标:主主复制。两台数据库服务器设置成主主复制方式,即对任何一台的更改都会自动同步到另外一台。
第一台:ip地址为 xxx.xxx.xxx.156 主机名 s156
第二台:ip地址为 xxx.xxx.xxx.170 主机名 s170
注:本文中的ip地址均采用 xxx. 形式,运用时根据实际情况修改。
本文链接:http://codingstandards.iteye.com/blog/1535994 转载请注明出处
操作步骤一:停止应用运行
在修改mysql配置之前,应该停止与数据库有关的进程(程序),比如:
1. tomcat或其他Web应用容器
使用 service tomcat stop 停止
或者进入 tomcat/bin 执行 ./shutdown.sh)
2. crontab 里面设置的某些与数据库有关的定时任务。
比如:那些检测tomcat是否启动的定时任务。
可以先用 crontab -e 打开,把相应项注释掉(在前面加#号)。
3. 其他与数据库有关的进程。
操作步骤二:检查主机名
什么情况下需要修改主机名?
如果发现shell命令行提示符是
[root@localhost ~]#
或者用hostname命令得到主机名是localhost
[root@localhost ~]# hostname
localhost
为什么需要确认主机名是否正确?
1. 因为有些时候,安装系统的人比较懒,没有在安装时设置主机名;
2. mysql运行时生成日志文件需要用到主机名,尤其是配置成复制(replication)后;
3. 如果在配置了复制之后再进行修改主机名,会造成mysql执行错误,这是我曾经碰到过的情况。
如果不需要修改主机名,跳到下一个步骤。
注意:需要对两台服务器检查和修改。
修改主机名的步骤:
1. 停止与主机名有关系的程序或服务,比如mysql(它生成的日志文件名中包含主机名)
service mysql stop
2. 使用hostname命令修改主机名(假定新主机名为newname)
hostname newname
比如:hostname s156
3. 在/etc/hosts文件中配置主机名的解析(假定ip地址记为ip,主机名newname,域名为yourdomain.com)
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
ip newname.yourdomain.com newname
比如:xxx.156 s156.hndy16.com s156
4. 在/etc/sysconfig/network中修改HOSTNAME=newname
比如:HOSTNAME=s156
5. 最好重启机器,如果不允许的话,重新登录也行
重启使用 reboot 命令
重新登录使用 exit 命令
6. 看一下命令行提示符和hostname是否正确
[root@s156 ~]# hostname
s156
7. 重新启动第一步中停止的程序或服务,比如mysql
service mysql start
操作步骤三: 创建复制账号
需要在两台数据库上创建,假定用户名和密码都是rep。
先登录mysql
mysql -pxxx
创建用户账号,只赋予slave权限
grant replication slave on *.* to 'rep'@'xxx.170' identified by 'rep';
清空所有表和块写入语句
flush tables with read lock;
操作步骤四:手工复制数据库
如果两台服务器都是新装的,可以跳过这一步。
如果原来单机上有数据,那么需要将数据复制到另外一台上面,让它们在开始复制之前的状态相同。
有两种方式:
1. 复制文件法:将数据库的数据文件直接复制到另外一台;
2. 使用 mysqldump 工具导出数据,然后导入到另外一台。
注意:不是所有的数据需要复制,比如 mysql 数据库、information_schema 数据库 和 performance_schema 数据库。
如果 test数据库中没有什么重要数据,也不必复制。
我经常采用第2种方式:
mysqldump -pxxx --default-character-set=gbk dbname >dbname.sql
tar zcf dbname.tar.gz dbname
通过sftp传到另外一台上面
sftp other_hostname
put dbname.tar.gz
quit
或者从另外一台机器上sftp
sftp source_hostname
get dbname.tar.gz
quit
将数据解压
tar zxf dbname.tar.gz
导入到数据库中
mysql -pxxx --default-character-set=gbk <dbname.sql
操作步骤五:停止mysql服务
操作命令是
service mysql stop
此步的目的是避免数据库中的数据在我们修改配置文件时被修改。
当然如果所有与数据库有关的应用程序和定时任务都已经停止,那么应该不会出现这种情况。
但是,不怕一万,就怕万一。
操作步骤六:修改mysql配置文件
配置文件 /etc/my.cnf
这是其中一台的配置,另外一台稍作修改就可以了。
default-character-set=gbk
[mysqld]
#default-character-set=gbk
character-set-server=gbk
# server
server-id=156
log-bin=mysql-bin
binlog-ignore-db=mysql
# replication
#master-host=xxx.170
#master-port=3306
#master-user=rep
#master-password=rep
#master-connect-retry=60
# auto_incr
auto_increment_offset=1
auto_increment_increment=2
另外一台机器上的配置
default-character-set=gbk
[mysqld]
#default-character-set=gbk
character-set-server=gbk
# server
server-id=170
log-bin=mysql-bin
binlog-ignore-db=mysql
# replication
#master-host=xxx.156
#master-port=3306
#master-user=rep
#master-password=rep
#master-connect-retry=60
# auto_incr
auto_increment_offset=2
auto_increment_increment=2
要点1:默认字符集都应该一样,比如gbk:
[client] 的配置名称为 default-character-set
[mysqld] 的配置名称为 character-set-server (注:与以前版本的mysql不同,5.5版不认识 default-character-set)
要点2:server-id 要互不相同才行,可以是任意的正整数
为了更容易清楚是那一台服务器,可以设置为 ip地址的最后那个数字。
要点3:log-bin 和 binlog-ignore-db 配置
以前版本的mysql,binlog-ignore-db 项也可以配置成 set-variable=binlog-ignore-db=mysql,但5.5版不行了。
要点4:不能配置 master-host 等项
上面的几个配置文件中 master-host, master-port, master-user, master-password 等项都注释掉了,因为5.5版不支持这种配置方式了,
要改用 change master to 语句(在后面的步骤中会使用)
要点5:自动递增的设置
在使用mysql做数据库时,经常会使用 auto_increment 整数类型的字段作为主键,这种主键由mysql服务器生成,每次自动递增1。
如果是在主主复制方式下,就会产生冲突,即有可能两台服务器产生同一主键值。
所以 mysql 提供了 auto_increment_offset 和 auto_increment_increment 配置项,
其中 auto_increment_increment 是每次递增的数值,应该大于等于复制集群中服务器的数量,比如在主主复制中可以设置为2;
auto_increment_offset 是基数,可以从1开始到auto_increment_increment,每台服务器应该不同,比如一台设置为1,另外一台设置2。
注意:如果是应用程序模拟生成自动递增,可能需要修改应用程序。
操作步骤七:启动mysql服务
service mysql start
如果不能启动,那么就要查看 /var/lib/mysql/*.err 文件的内容去分析启动失败的原因,修改一下配置文件再重新启动。
操作步骤八:更改 master 设置
由于5.5版不再支持配置文件中直接设置 master-host 等数据,只能使用 change-master-to 命令,如下所示:
CHANGE MASTER TO
MASTER_HOST='master_host_name',
MASTER_USER='replication_user_name',
MASTER_PASSWORD='replication_password',
MASTER_LOG_FILE='recorded_log_file_name',
MASTER_LOG_POS=recorded_log_position;
注意:两台服务器上都要执行
实际例子:
在s156上
change master to master_host='xxx.170', master_port=3306, master_user='rep', master_password='rep';
在s170上
change master to master_host='xxx.156', master_port=3306, master_user='rep', master_password='rep';
之后启动从服务器线程
start slave 或者 slave start
执行示例:
mysql> change master to master_host='xxx.156', master_port=3306, master_user='rep', master_password='rep';
Query OK, 0 rows affected (0.01 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
操作步骤九:确认并验证配置
使用 show slave status\G 查看从服务器状态。
使用 SHOW VARIABLES LIKE 'auto_inc%'; 查看自动递增设置。
在一台上创建测试表、插入和更新数据,到另外一台上是否被复制。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: xxx.170
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 107
Relay_Log_File: s156-relay-bin.000002
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 107
Relay_Log_Space: 408
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 170
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 2 |
| auto_increment_offset | 1 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> use test
Database changed
mysql> create table test1 (id integer not null primary key);
Query OK, 0 rows affected (0.00 sec)
在另外一台看看是否复制过来了
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1 |
+----------------+
1 rows in set (0.00 sec)
更多的确认测试可自行进行,比如:insert/update/delete等操作。
操作步骤十:恢复应用运行
与操作步骤一对应,要把应用程序和定时任务恢复过来。
比如:
1. tomcat等应用服务器。
2. crontab中的与数据库有关的定时任务。
3. 其他与数据库有关的程序。
http://codingstandards.iteye.com/blog/1535994
发表评论
-
阿里开源Mysql分布式中间件:Cobar
2015-01-28 00:18 1018Cobar是阿里巴巴研发的关系型数据的分布式处理系统(Amoe ... -
由浅入深探究mysql索引结构原理、性能分析与优化
2015-01-28 00:13 718第一部分:基础知识 第 ... -
MySQL Explain 结果解读与实践
2015-01-27 22:33 790Explain 结果解读与实践 基于 MySQL 5.0.6 ... -
MySQL 高可用架构之MMM - yayun
2015-01-20 00:09 748简介 MMM(Master-Master replicati ... -
理解MySQL——索引与优化
2015-01-09 15:23 598写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进 ... -
B树、B-树、B+树、B*树
2015-01-09 15:10 663B树 即二叉搜索树: 1.所 ... -
MySQL NDB 6.3.20集群安装
2014-10-19 10:49 895引言: 本文会先对MySQ ... -
sphinx的配置和管理
2013-10-16 14:38 667Sphinx增量索引(转) 在实际应用中往往有这么一 ... -
微博数据库设计
2013-06-14 09:27 0部分功能建表设计 Use ... -
MySQL STRAIGHT_JOIN 与 NATURAL JOIN
2013-03-12 14:10 1140MySQL STRAIGHT_JOIN STRAIGHT_ ... -
MySQL的四种不同查询的分析
2013-03-02 09:42 01.前置条件: 本次是基于小数据量,且数据块在一个页中的最 ... -
MySQL Variable解读
2012-12-07 14:36 2063说明:具体参数还是要很对应版本对应,这是dba必须要 ... -
MySQL DELAY_KEY_WRITE(在mysql插入大数据量时可以关闭索引的选项)
2012-12-07 14:27 0mysql插入索引太慢 加参 ... -
mysql 的explain解析
2012-11-16 15:43 0在 explain的帮助下,您 ... -
java execute、executeQuery和executeUpdate之间的区别
2012-11-16 13:51 1025在用纯JSP做一个页面报警功能的时候习惯性的用executeQ ... -
MySQL分区表
2012-11-16 10:46 899查看分区情况 点击(此处)折叠或打开 ... -
Linux启用MySQL的InnoDB引擎[转]
2012-10-24 23:09 0前几天公司的一个项目组的同事反应说公司内部的一台Linux服务 ... -
源码安装Mysql,补装innodb引擎方法
2012-10-24 23:03 889首先确定,在mysql的'plugin_dir'下有ha_ ... -
MYSQL使用.frm恢复数据表结构的实现方法
2012-10-16 23:06 924我们都知道当我们建立数据表(innodb或myisam)时,会 ... -
MySQL复制实现互为主从双机热备
2012-04-22 23:31 0A B 为两台MySQL服务器, ...
相关推荐
mysql5.5版本和配置文件的详细说明。非常适合初学者。mysql5.5版本和配置文件的详细说明mysql5.5版本和配置文件的详细说明
MySQL5.5 安装步骤详细图解,本人亲自在笔记本上安装,我的系统是Windows 64bit 家庭普通版,希望能给大家带来帮助。
版本信息:Mysql-5.5.18-win32.msi Mysql5.5安装步骤详细图解
mysql5.5 主从配置,可以使得mysql服务器配置更加简单,熟练
这是关于mysql以及其他开发工具在开发中很重要得一个工具,他可以实现数据库的连接,将在mysql中存储的数据在eclipse或myeclipse中连接。
linux 下mysql5.5安装配置大全
MySQL5.5启动多实例详细配置文件,多实例安装方法可参考博文:Centos6.10采用cmake编译安装MySQL5.5多实例安装
mysql5.1升级mysql5.5操作步骤,比较详细的word文档
centos 6.5配置mysql5.5
java连接mysql5.5的jar包 mysql-connector-java-5.1.35-bin.jar
mysql 5.5安装版本,安装步骤网上有,大家可以搜索自己安装。
MYSQL5.5英文手册,MYSQL5.5手册,MYSQL英文手册,MYSQL手册
mysql5.5安装包、mysql图形化界面工具
mysql5.5复制参数
MySQL数据库5.5版本的安装和配置,MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司
MySQL5.5安装步骤
mysql5.5版本含安装教程
mysql5.5版本和配置文件的详细说明。非常适合初学者
MySQL 5.5的300多个变量详细解释,DBA和MySQL调优必看~
MySQL 5.5+图形界面工具MySQL 5.5+图形界面工具MySQL 5.5+图形界面工具MySQL 5.5+图形界面工具