Mysql镜像机制配置过程
主服务器: 192.168.0.25
从服务器: 192.168.0.26
MYSQL版本:mysql-5.0.22.tar.gz
安装日期:2010年5月14日
一、镜像机制简单介绍
镜像机制是一种能够让运行在不同计算机上的两个或多个Mysql 服务器保持同步变化的机制。不同的数据库系统采用了不同的方法来建立镜像机制。mysql目前只支持“主-从”镜像关系,这种镜像关系的特点是:只有一台主控系统(可读/可写),所有的数据修改操作都必须在这台系统系统上进行,有一台或多台从属系统(只读),他们有着与主控系统完全一样的数据,主控系统在经过一个短暂的延迟后也将发生在他们身上;
主从镜像关系中的数据同步是通过主控系统的二进制日志文件实现的,主控系统把自己执行过的 SQL命令记载到自己的二进制日志文件中里,从属系统则通过从主控系统的二进制文件读出SQL命令并加以执行的办法来同步他们自己的数据库;MYSQL镜像机制不要求主控和从属系统必须使用同一种操作系统
1)、镜像机制的优点
1)、安全;
2)、速度;
2)、镜像机制的局限性和不足:
1)、Mysql目前只支持“主-从”镜像关系,从属系统只能用来完成数据库查询操作(只读);目前在主控系统发生故障时,mysql的镜像机制还不能把一台从属系统自动切换为新的主控系统;也就是说mysql镜像机制目前只能保障查询操作不会因为主控系统发生故障而无法执行,数据的修改操作还得不到这样的保证,对无缝镜像关系预计在5.1版本中实现;
2)、主从版本最好相同,一般来说从属系统的版本不低于主控系统;
二、配置过程
第一步配置主服务器
1)、首先在主从安装MYSQL;
2)、在主服务器上进入mysql,在命令行下执行
mysql>grant replication slave on *.* to 'slave'@'192.168.0.26' identified by '123456';
mysql> flush privileges;
3)、配置/etc/my.cnf配置文件,修改配置文件中如下内容,如果没有添加上去:
log-bin=mysqlmaster
#启动二进制日志系统,绝对应该为日志文件明确的起一个名字(这里我们用mysqlmaster),这是因为没有这么做,mysql服务器将自动使用hostname-bin作为其二进制日志文件的名字,此后万一这台计算机的主机名改变,镜像机制将无法正常工作;
binlog-do-db=lianhua
需要同步的数据库名
binlog-ignore-db=mysql
binlog-ignore-db=test
不需要同步的数据库名避免同步mysql用户配置,以免不必要的麻烦
server-id = 1
机数据库ID 标示为主,该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232–1之间的一个正整数值
4)、停止数据库,并将本地需要同步数据库打包拷贝到从数据库上
#service mysqld stop
#cd /usr/local/mysql/var
#tar -cvf lianhua.tar lianhua
#scp lianhua.tar root@192.168.0.25:/usr/local/mysql
[root@node1 ~]#Service mysqld start
第二步、配置从服务器
1)、停止数据库
#service mysqld stop
2)、配置slave服务器/etc/my.cnf文件
server-id = 2
从服务器ID号,不要和主ID相同
master-connect-retry =60
断点重新连接时间
replicate-ignore-db = mysql
replicate-ignore-db = test
不需要同步的数据库名
replicate-do-db = lianhua
同步数据库名
3)、装载主服务器数据库并启动数据库
[root@dnsslave var]# tar -xvf lianhua.tar
[root@dnsslave var]# service mysqld start
Starting MySQL [确定]
第三步
1)、在主服务器上进入mysql的命令行
用下面的命令查看
[root@dns log]# mysql -u root -p
Enter password:
mysql> show master status; #显示(不同主机结果不同)
+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mysqlmaster.000002 | 98 | lianhua | mysql,test |
+--------------------+----------+--------------+------------------+
1 row in set (0.02 sec)
2)、在从服务器上执行MYSQL命令行如下:
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> change master to
->master_host = ‘192.168.0.25’,
->master_user = ‘slave’,
->master_password = ‘123456’,
-> master_log_file = 'mysqlmaster.000002',
-> master_log_pos = 98;
Query OK, 0 rows affected (0.01 sec)
mysql>slave start;
mysql> show slave statusG;
用show slave statusG;看一下从服务器的同步情况
关于后面红线的错误提示,咨询过属正常现象,我还是不大明白,还望指教;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,那代表已经在同步
第四步:测试
1)、在主服务器
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| lianhua |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use lianhua;
Database changed
mysql> create table sanguo (id INT,name char(10));
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+-------------------+
| Tables_in_lianhua |
+-------------------+
| sanguo |
+-------------------+
1 row in set (0.00 sec)
#用navicat连接创建数据内容;
mysql> select * from sanguo;
+------+--------+
| id | name |
+------+--------+
| 1 | 刘备 |
| 2 | 关羽 |
| 3 | 张飞 |
| 4 | 赵云 |
+------+--------+
4 rows in set (0.00 sec)
2)、在从服务器上登录
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| lianhua |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> use lianhua;
Database changed
mysql> show tables;
+-------------------+
| Tables_in_lianhua |
+-------------------+
| sanguo |
+-------------------+
1 row in set (0.00 sec)
mysql> select * from sanguo;
+------+--------+
| id | name |
+------+--------+
| 1 | 刘备 |
| 2 | 关羽 |
| 3 | 张飞 |
| 4 | 赵云 |
+------+--------+
4 rows in set (0.00 sec)
mysql>
连个表都是一样的。