MYSQL5.0双机热备

30 篇文章 0 订阅
近日研究mysql 5.0.* Replication.费了好大劲终于搞明白了,拿出来和大家一起分享.(假设你已经在linux系统上面安装了mysql5.0.* 并且熟悉基本的linux命令.我的系统为Fedora Core 7,mysql为5.0.37).搭建一个mysql replication的双主从结构,即两台主机A:192.168.0.2,B:192.168.0.3互为master/slave.因而, mysql的版本必须一致才行,以下为操作过程,详细的原因待后面解释.

①    分别在主机A,B上面建立用于Replication的用户.给予REPLICATION SLAVE权限即可
②   
shell>mysqld_safe -user=mysql&
shell>mysql -uroot -ppassword
mysql>GRANT REPLICATION SLAVE ON *.*
    -> TO 'repl'@'192.168.0.%' IDENTIFIED BY 'repl';
mysql>quit;
##停止mysql Server.
shell>mysqladmin shutdown -uroot -ppassword

②如若两台机器的数据库不一致,则将某一台的数据转移到另外一台,例如将A数据库备份到B.主机A打包要复制的数据库,转移到B机器.否则,直接执行步骤③即可..
shell> cd /usr/local/mysql/
/usr/local/mysql/#shell#> tar -zcvf var.tar.gz var
这样,我们得到一个mysql数据库的打包文件var.tar.gz
在B机器上删除以前的数据库文件,将var.tar.gz复制到此处,修改权限
shell> cd /usr/local/mysql/
/usr/local/mysql/#shell#>rm -fr var
/usr/local/mysql/#shell#>tar -zxvf var.tar.gz
/usr/local/mysql/#shell#>cd var
/usr/local/mysql/var/#shell#>chown -R root .
/usr/local/mysql/var/#shell#>chown -R mysql .

③分别修改A,B主机的mysql 配置文件.均如下操作
shell>vi /etc/my.cnf
          ##找到[mysqld],添加一行'log-bin',并且设置A,B主机的server-id为两个不同的整数即可.例如##
          ## A主机修改为
[mysqld]
log-bin
server-id=1
          ## B主机修改为
[mysqld]
log-bin
server-id=2
          ##保存退出
④A主机用如下方式启动mysql.
shell>mysqld_safe --skip-slave-start --user=mysql&
          ##登陆mysql
shell>mydql -uroot -ppassword
mysql>change master to
    ->MASTER_HOST='192.168.0.3', ##主机B的ip
    ->MASTER_USER='repl',
    ->MASTER_PASSWORD='repl';
mysql> start slave;

⑤B主机也用如下方式启动mysql.
shell>mysqld_safe --skip-slave-start --user=mysql&
          ##登陆mysql
shell>mydql -uroot -ppassword
mysql>change master to
    ->MASTER_HOST='192.168.0.2', ##主机A的ip
    ->MASTER_USER='repl',
    ->MASTER_PASSWORD='repl';
mysql> start slave;
⑥现在已基本完成了操作,在任意一台运行如下命令查看master/slave状态
mysql> show master status;  ##如果Server-id没有设置,此处将会有警告信息
+----------------------+--------------+--------------+------------------+
| File                | Position    | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+--------------+--------------+------------------+
| localhost-bin.000003 | 98          |              |                  |
+----------------------+--------------+--------------+------------------+
1 row in set (0.03 sec)   
****************************************
mysql> show slave status;
+----------------------------------+-------------+-------------+-------------+---------------+----------------------+---------------------+----------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Slave_IO_State                  | Master_Host | Master_User | Master_Port | Connect_Retry | Master_Log_File      | Read_Master_Log_Pos | Relay_Log_File            | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master |
+----------------------------------+-------------+-------------+-------------+---------------+----------------------+---------------------+----------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
| Waiting for master to send event | 192.168.0.3 | repl        | 3306        | 60            | localhost-bin.000003 | 98                  | localhost-relay-bin.000008 | 239          | localhost-bin.000003 | Yes              | Yes              |                |                    |                    |                        |                        |                            | 0          |            |  0          | 98                  | 239            | None            |                | 0            | No                |                    |                    |                |                  |                | 0                    |
+----------------------------------+-------------+-------------+-------------+---------------+----------------------+---------------------+----------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+
1 row in set (0.01 sec)

*****************************************
mysql> show processlist;
+---+-------------+-------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
| Id| User        | Host              | db  | Command    | Time | State                                                                | Info |
+---+-------------+-------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+
| 1 | system user |                  | NULL | Connect    | 2073 | Waiting for master to send event                                      | NULL            |
| 2 | system user |                  | NULL | Connect    | 1426 | Has read all relay log; waiting for the slave I/O thread to update it | NULL            |
| 5 | repl        | 192.168.0.3:48356 | NULL | Binlog Dump | 832  | Has sent all binlog to slave; waiting for binlog to be updated        | NULL            |
| 6 | root        | localhost        | NULL | Query      | 0    | NULL                                                                  | show processlist |
+----+-------------+-------------------+------+-------------+------+----------------------------------------------------------------------+------------------+
4 rows in set (0.00 sec)
***此处应该有3个以上的id才正确.
**************************************************************************************************************************************** 版本问题:
mysql的replication,原则上master的版本不应高于slave.这个问题的原因,涉及到replication的原理(异步复制基本原理):

从MySQL3.23.15以后,MySQL支持单向的异步复制。也就是说,1台MySQL服务器充当Master(主库),1台或多台MySQL服务器充当Slaves(从库),数据从Master向Slaves进行异步复制。注意,这种复制是异步的,有别于MySQL的同步复制实现(这种实现称做MySQL集群,MySQL Cluster)。

当主库有更新的时候,主库的一个线程会把更新操作的SQL写入二进制日志(Bin log),并维护一个二进制日志文件的索引,以便于日志文件轮回(Rotate)。在从库启动异步复制的时候,从库会开启两个I/O线程,其中一个线程连接主库,要求主库把二进制日志的变化部分传给从库,并把传回的日志写入本地磁盘。另一个线程则负责读取本地写入的二进制日志,并在本地执行,以反映出这种变化。较老的版本在复制的时候只启用一个I/O线程,实现这两部分的功能。(因而,在本试验中,mysql>show processlist 至少应该有3个process)
主库中的任何操作,从库都可以处理,因而要求master的版本不应高于slave.
有几个关键性的地方需要注意:

- 主库必须启用Bin log,主库和从库必须有唯一的Server Id
- 从库必须清楚了解从主库的哪一个Bin log文件的哪一个偏移位置起开始复制
- 主库和从库的MySQL版本需保持一致

用户及权限:从mysql 4 开始,添加了一个专门的权限,用来做热备,这个权限本质应该还是文件读取权限,但是应该只能用来读取日志,防止一些漏洞。
对于客户端来说,就是设置这个账号,密码,主服务器地址。这只是单向的,再配置一个对等的同步通道,就支持双向的热备了。
为了方便,AB主机都添加了repl热备用户,此处用户名,密码等你可以任意选择,只要在change master 的时候,添加正确即可.初次做这个的时候,你也可以给予all privileges. mysql并不赞同这么给予权限,说是因为安全的原因.  GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'repl';这个语句授权的前提是两台主机位于同一个网段.其实,随你怎么设置,只要主机A能在主机B上用repl用户访问,主机B能在主机A上用repl用户访问即可.
配置文件:按照官方手册,添加log-bin即表示当前主机将作为master. log-bin也可以带参数:log-bin=sql-bin (用与记录操作的二进制文件名). 初次做这个的朋友,最好不要带参数,否则会比较麻烦的.在任何时候,你都可以用
mysql> CHANGE MASTER TO
    ->    MASTER_HOST='master_host_name',
    ->    MASTER_USER='replication_user_name',
    ->    MASTER_PASSWORD='replication_password';
后重启来更改master.

Show Slave status:此处Slave_IO_Running ,Slave_SQL_Running 都应该是yes,表示从库的I/O,Slave_SQL线程都正确开启.
更多详细信息以及参数设置,请参考MySQL 5.0 Manual手册.
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值