Chinaunix
标题: MySql Replication [打印本页]
作者: raymanan 时间: 2011-12-20 09:46
标题: MySql Replication
1.
准备服务器
由于MySQL不同版本之间的(二进制日志)binlog格式可能会不一样,因此最好的搭配组合是Master的MySQL版本和Slave的版本相同或者更低,Master的版本肯定不能高于Slave版本。
假设同步主机1名为:192.168.0.150,主机2名为:192.168.0.142,2个MySQL的basedir目录都是/usr/share/mysql,datadir都是:/var/lib/mysql。
- 主机1:
-
-
操作系统:fc13.x86_64
-
-
IP:192.168.0.150
-
-
MySQL版本:5.1.52
- 主机2:
-
-
操作系统:fc13.x86_64
-
-
IP:192.168.0.142
-
-
MySQL版本:5.1.52
2.
安装Mysql
3.
创建数据库
分别登录主机1和主机2的mysql:
创建数据库:
- create database repdatabase;
4.
设置同步服务器
4.1
设置主机1:192.168.0.150
4.1.1 配置my.cnf文件
每个同步服务器都必须设定一个唯一的编号,否则同步就不能正常运行。接下来开始修改 /etc目录下的my.cnf,在[mysqld]配置段增加以下几行:
- server-id = 1
-
-
log-bin
-
binlog_format='MIXED'
-
-
binlog-do-db= repdatabase #需要同步的数据库,如果没有本行,即表示同步所有的数据库
-
-
binlog-ignore-db=mysql #被忽略的数据库
-
-
-
-
master-host = 192.168.0.142 #主服务器名
-
-
master-user = rep #同步账户名,默认是test
-
-
master-password = rep #同步帐户密码,默认是空
-
-
master-port = 3306 #主服务器的 TCP/IP 端口号,默认是3306
-
-
master-connect-retry=60
-
-
-
-
#为了使用事务的InnoDB在复制中最大的持久性和一致性,应该指定
-
-
innodb_flush_log_at_trx_commit=1,sync_binlog=1 选项:
-
-
replicate-ignore-db=mysql
-
-
replicate-do-db=repdatabase
-
-
-
-
innodb_flush_log_at_trx_commit=1
-
-
sync_binlog=1
4.1.2 创建一个有复制权限的用户
在主机1上增加一个账号专门用于同步,如下:
mysql>
- GRANT REPLICATION SLAVE ON *.* TO rep@192.168.0.142 IDENTIFIED BY 'rep';
如果想要在主机2上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:
mysql>
- GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@192.168.0.142 IDENTIFIED BY 'rep';
4.1.3 重启mysql服务
4.1.4 锁住主机,注意二进制日志的位置并备份主机数据库
a)
用show master status 命令看日志情况
mysql>
+------------------+----------+--------------+------------------+
| File
| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysqld-bin.000001 |
106 | repdatabase | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
b)
备份主机1上的数据,首先执行如下SQL语句:
mysql>
- FLUSH TABLES WITH READ LOCK;
不要退出这个终端,否则这个锁就不生效了;接着导出数据:
- [billy@black ~]$ mysqldump -u root repdatabase > /home/billy/mysql/master/repdatabase.sql
用以下命令在主机上重新打开写操作功能:
mysql>
4.2
设置主机2:192.168.0.142
4.2.1 配置my.cnf文件
在[mysqld]配置段增加如下几行:
- server-id = 2
-
-
log-bin
-
binlog_format='MIXED'
-
-
binlog-do-db= repdatabase #需要同步的数据库,如果没有本行,即表示同步所有的数据库
-
-
binlog-ignore-db=mysql #被忽略的数据库
-
-
-
-
master-host = 192.168.0.150 #主服务器名
-
-
master-user = rep #同步账户名,默认是test
-
-
master-password = rep #同步帐户密码,默认是空
-
-
master-port = 3306 #主服务器的 TCP/IP 端口号,默认是3306
-
-
master-connect-retry=60
-
-
replicate-ignore-db=mysql
-
-
replicate-do-db=repdatabase
-
-
-
-
#为了使用事务的InnoDB在复制中最大的持久性和一致性,应该指定
-
-
innodb_flush_log_at_trx_commit=1,sync_binlog=1 选项:
-
-
innodb_flush_log_at_trx_commit=1
-
-
sync_binlog=1
4.2.2 创建一个有复制权限的用户
在主机2上增加一个账号专门用于同步,如下:
mysql>
- GRANT REPLICATION SLAVE ON *.* TO rep@192.168.0.150 IDENTIFIED BY 'rep';
如果想要在主机2上有权限执行 "LOAD TABLE FROM MASTER" 或 "LOAD DATA FROM MASTER" 语句的话,必须授予全局的 FILE 和 SELECT 权限:
mysql>
- GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep@192.168.0.150 IDENTIFIED BY 'rep';
4.2.3 在主机2上加载Dump(转存)文件
- [billy@blue ~]$ mysql -u root repdatabase </home/billy/mysql/slave/ repdatabase.sql
4.2.4 重启mysql服务
4.2.5 初始化复制
a)
在主机2中进入mysql,启动Slave:
mysql>
若提示:
ERROR 1200 (HY000): The server is not
configured as slave; fix in config file or with CHANGE MASTER TO
则执行以下操作:
先在master主机执行show master status:
- mysql>show master status;
+------------------+----------+--------------+------------------+
| File | Position |
Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysqld-bin.000001 | 106 |
repdatabase | mysql |
+------------------+----------+--------------+------------------+
1 row in set (0.00
sec)
然后在主机2执行:
- mysql> stop slave;
-
-
Query OK, 0 rows affected (0.00 sec)
-
-
mysql> change master to master_host='192.168.0.150', master_user='rep', master_password='rep',master_log_file='mysqld-bin.000001', master_log_pos=106;
-
-
Query OK, 0 rows affected (0.09 sec)
-
-
mysql> start slave;
-
-
Query OK, 0 rows affected (0.00 sec)
这些参数代表:
l MASTER_HOST: 主机的IP或者名称
l MASTER_USER: 这是我们在前面步骤中授予REPLICATION SLAVE权限的用户,在这
个例子中就是“rep”
l MASTER_PASSWORD: 这是我们在前面步骤中分配给“rep”的密码
l MASTER_LOG_FILE: 这是我们在前面步骤中确定的文件名(File)
l MASTER_LOG_POS: 这是我们在前面步骤中确定的位置(Position)
b) 启动主机1的slave:
(细节参考上一条)
c)
启动成功后,分别登录两台主机,查看同步状态:
- mysql -hlocalhost -uroot
-
-
mysql>SHOW SLAVE STATUS\G
-
-
*************************** 1. row ***************************
-
-
Slave_IO_State: Waiting for master to send event
-
-
Master_Host: rep1
-
-
Master_User: rep
-
-
Master_Port: 3306
-
-
Connect_Retry: 60
-
-
Master_Log_File: binlog.000001
-
-
Read_Master_Log_Pos: 98
-
-
Relay_Log_File: relay.000003
-
-
Relay_Log_Pos: 232
-
-
Relay_Master_Log_File: binlog.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: 98
-
-
Relay_Log_Space: 232
-
-
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
-
-
1 row in set (0.00 sec)
可以看到,Slave_IO_Running 和
Slave_SQL_Running 两列的值都为 "Yes",这表明
Slave 的
I/O 和
SQL 线程都在正常运行。
至此,同步设定成功。
5.
测试
- create table class(id int primary key not null,name varchar(12) not null);
6.
基本命令
- Mysql -u username –p password
-
-
Show master status;
-
-
Show slave status;
-
-
SHOW PROCESSLIST
mysql master 相关命令:
- show master status
-
show slave hosts
-
show binlog events
-
purge logs to ‘log_name’
-
purge logs before ‘date’
-
reset master(老版本flush master)
-
set sql_log_bin=
mysql slave 相关命令:
- slave start
-
slave stop
-
SLAVE STOP IO_THREAD #此线程把master段的日志写到本地
-
SLAVE start IO_THREAD
-
SLAVE STOP SQL_THREAD #此线程把写到本地的日志应用于数据库
-
SLAVE start SQL_THREAD
-
reset slave
-
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
-
load data from master
-
show slave status(SUPER,REPLICATION CLIENT)
-
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= #动态改变master信息
-
PURGE MASTER [before ‘date’] #删除master端已同步过的日志
- show variables like 'binlog_for%';
7.
JDBC 连接
Driver=
com.mysql.jdbc.Driver
URL=jdbc:mysql://192.168.0.150:3306,192.168.0.142:3306/repdatabase
Property:
useConfigs=clusterBase
8.
参考文档
wp_mysql-5_5_Replication.cn.pdf
欢迎光临 Chinaunix (http://bbs.chinaunix.net/) |
Powered by Discuz! X3.2 |