请联系我 有广告合作意向的 请联系我

Mysql主从复制(Master-Slave)实践

主从复制流程:
(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2) slave将master的binary log events拷贝到它的中继日志(relay log);
(3) slave重做中继日志中的事件,将改变它自己的数据。

虚拟机:
Master:192.168.5.10 (CentOS 5.5 mysql 5.0.95 )
Slave:192.168.5.22 (CentOS 6.0 mysql 5.1.61 )

Master服务器配置:
1)、确保/etc/my.cnf中有如下参数,没有的话需手工添加,并重启mysql服务。
[mysqld]
log-bin=mysql-bin 启动二进制文件
server-id=1 服务器ID,ID号不可与slave相同

2)、登陆mysql
# mysql -uroot -proot

mysql> grant replication slave, replication client on *.* to ‘backup’@’192.168.5.22’ identified by ‘backup’; #创建backup用户,并授权给192.168.5.22使用

mysql> show master status;  #查询主数据库状态,并记下FILE及Position的值,这个在后面配置从服务器的时候要用到,如果是空数据库的则不需要记录
+——————+———-+————–+——————+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql_bin.000004 |       237 |              |                  |
+——————+———-+————–+——————+
1 row in set (0.00 sec)

Slave服务器配置:
1)、vim /etc/my.cnf ,修改如下:

[mysqld]
server-id=10 服务器ID
log-bin=mysql-bin 启动二进制文件,如果slave不做其他master使用,可以不开启
relay_log = mysql-relay-bin #中继日志,从服务器专用
relay_log_index = mysql-relay-bin.index

然后重启下mysql

2)、登录mysql,执行如下语句:
mysql> change master to master_host=’192.168.5.10′,master_user=’backup’,master_password=’backup’,master_log_file=’mysql_bin.000004′,master_log_pos=237;
(注,这里如果执行出错,可能是已经启用slave原因,执行slave stop; 先关闭,在执行前面语句!)

启动slave同步
mysql> start slave;

检查主从同步,如果您看到Slave_IO_Running和Slave_SQL_Running均为Yes,则主从复制连接正常

mysql> show slave statusG 查看是否运行正常.
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.5.10
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.000004
Read_Master_Log_Pos: 322
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 328
Relay_Master_Log_File: mysql_bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以下略…………

如果主服务器已经存在应用数据,则在进行主从复制时,需要做以下处理:

1)、主数据库进行锁表操作,不让数据再进行写入动作
mysql> FLUSH TABLES WITH READ LOCK;

2)、查看主数据库状态
mysql> show master status;

3)、记录下 FILE 及 Position 的值。
将主服务器的数据文件(整个/opt/mysql/data目录)复制到从服务器,建议通过tar归档压缩后再传到从服务器解压。

4)、取消主数据库锁定
mysql> UNLOCK TABLES;

验证主从复制效果
在主数据库上新建一个库,并且在库中写一个表和一些数据:
创建数据库bbo
mysql> create database bbo;
Query Ok, 1 row affected (0.01 sec)

创建表bbo

mysql> create table first_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.07 sec)

向表bbo中插入记录

mysql> insert into first_tb values (001,’myself’);
Query OK, 1 row affected (0.02 sec)

在从服务器上查看

mysql> show databases;
+——————–+
| Database |
+——————–+
| information_schema |
| bbo |
| mysql |
| test |
+——————–+
6 rows in set (0.00 sec)

mysql> use bbo
Database changed
mysql> select * from first_tb;

+——+——–+
| id | name |
+——+——–+
| 1 | myself |
+——+——–+
1 row in set (0.00 sec)

由此,整个MySQL主从复制的过程就完成了

马上继续进行MySQL读写分离的安装与配置&……

show master status 查看master状态
show slave status 查看slave状态
show processlist 查看当前进程
stop slave 暂时停止slave进程
start slave 开始slave进程

在Mysql环境下,可以使用以下语句进行设置密码:
也可以在创建一个用户时直接设置密码,grant语句将为你自动加密口令。
如:grant all on *.* to user_name@% identified by “your password”;
另外也可以在shell环境下用mysqladmin程序来设置密码。
如:mysqladmin -u root password “your password”

参考:
http://heylinux.com/archives/1004.html
http://www.cnblogs.com/iIoveMyD/archive/2012/06/15/2550925.html

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注