Mysql主从数据库设置
一、介绍
MYSQL数据库没有增量备份的机制,当数据量太大的时候备份是一个很大的问题。还好
MYSQL数据库提供了一种AB复制的机制。我们的从库所保存的数据必须和主库同步,也就
是主库和从库的数据是一模一样的。因此,我们要做到:对主库进行任何的操作都可以引发
从库进行相同的操作。这就是我们所说的MYSQL的AB复制。
下面的这个实验使用了我们上面刚刚介绍过的二进制日志。其原理是,从库去读取主库
的二进制日志文件,并按照主库的二进制文件的记录对从库进行同样的操作,以达到从库与
主库内容同步的效果。要想实现双机的热备首先要了解主从数据库服务器的版本的需求。首
先,MYSQL的版本都要高于3.2,还有一个基本的原则就是作为从数据库的数据库版本可以
高于主服务器数据库的版本,但是不可以低于主服务器的数据库版本。以下是实验文档:
环境介绍:主库 192.168.0.1 从库 192.168.0.2
二、mysql数据库同步方法
1、主库创建/etc/my.cnf,修改
里边的键值增加
server-id=1
log-bin=binlog_name
2、主库增加用户,用于从库读取主库日志。
mysql> grant replication slave,reload,super on *.* to slave@192.168.0.2 identified by '123456'
mysql> flush tables with read lock;
3、从库连接主库进行测试。mysql -u slave -p123456 -h 192.168.0.1
如果连接成功说明主库配置成功
4、停从库,修改从库/etc/my.cnf,增加选项:
server-id=2
master-host=192.168.0.1
master-user=slave
master-password=123456
5、启动从库,进行主从库数据同步
/opt/mysql/share/mysql/mysql start
/opt/mysql/bin/mysql -u root -p
mysql>load data from master;
说明:这一步也可以用数据库倒入或者直接目录考过来。
6、进行测试:
①主库查看当前存在的库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| discuz |
| mysql |
| mysqltest |
| qqq |
| sample |
| test |
+--------------------+
7 rows in set (0.01 sec)
②从库查看当前存在库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| discuz |
| mysql |
| mysqltest |
| qqq |
| sample |
| test |
+--------------------+
7 rows in set (0.01 sec)
说明两者中的数据保持了一致性
③主库创建表,
mysql> create database xxx;
Query OK, 1 row affected (0.00 sec)
打开从库,察看:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| discuz |
| mysql |
| mysqltest |
| qqq |
| sample |
| test |
| xxx |
+--------------------+
8 rows in set (0.00 sec)
说明主从数据库创建成功。
7、主从数据库相关命令:
slave stop; slave start ; 开始停止从数据库。
show slave status\G; 显示从库状态信息
show master status\G;显示主库状态信息
purge master logs to ’binlog.000004’; 此命令非常小心,删除主数据库没用的二进制日志文件。如果误删除,那么从库就没有办法自动更新了。
change master;从服务器上修改参数使用
另外,如果你当前操作的从库以前曾经与其他服务器建立过主从关系,你可能会发现即使你在my.cnf文件中更改了主服务器的位置,但是MSQL仍然在试图连接就旧的主服务器的现象。发生这种问题的时候,我们可以通过清除master.info这个缓存文件或者在mysql中通过命令来进行设置。方式如下:
a、删除master.info方法
这个文件位于数据文件存放目录里。默认是在/var/lib/mysql中的。你可以直接
将其删除,然后重新启动服务器。
b、mysql命令方法
如果你不方便重新启动服务器的话,那么就只能使用mysql命令来帮助你做到。
首先登录到主服务器上,查看当前服务器状态:
mysql> show master status\G;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73 | test | manual,mysql |
+---------------+----------+--------------+------------------+
记录下File和Position的值。然后登录从服务器,进行如下操作:
mysql> slave stop;
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name', //主服务器二进制日志的文件名(前面要求记
录的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记录的参数)
mysql> slave start;