*两台Linux服务器,一主一从,从数据库同步主数据库的数据
*系统:Centos 6.4-64bit
*主(master)数据库服务器IP地址:192.168.100.200
*从 (slave )数据库服务器IP地址:192.168.100.201
*本实验用系统自带的rpm包安装,以提供mysql服务
1、分别在两台服务器上安装mysql服务
# yum -y install mysql mysq-server
# service mysqld start
# chkconfig mysqld on
2、配置主数据库
默认可以同步所有的库和表
# vi /etc/my.cnf #添加如下参数
log-bin=mysqld-bin #开启binlog日志,必须开启
server_id=200 #数据库ID值,唯一的,一般用本机的IP地址主机位
binlog-do-db=test #设置从服务器可以同步的库test,有多个就写多行
binlog-ignore-db=mysql #设置不可以同步的库mysql
# service mysqld restart #重启服务
3、在主数据库授权从数据库连接自己,且有拷贝数据的权限
登录到主服务器并授权,授权的用户名是slaveuser,密码是123456
mysql>grant replication slave on *.* to [email protected] identified by‘123456‘;
4、在从服务器上验证授权是否成功
在从数据库上若能登录到主数据库,则说明授权成功了
# mysql -h192.168.100.200 -uslaveuser -p123456
mysql> show grants; #查看用户slaveuser自己被授的权限
+---------------------------------------------------------------------------+
| Grants for [email protected] |
+---------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO ‘slaveuser‘@‘192.168.100.201‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ |
+---------------------------------------------------------------------------+
5、查看主数据库服务器上有哪些从服务器
mysql> show slave hosts; #从数据库还没配置,所以还看不到
6、配置从数据库
# vi /etc/my.cnf #添加如下参数
log-bin=mysqld-bin #开启binlog日志
server_id=201 #数据库ID号
report-host=localhost #向主服务器报告自己主机名,主服务器查询时会知道是哪个从服务器
report-host=192.168.100.201 #向主服务器报告自己IP,主服务器查询时会知道是哪个从服务器
slave-net-timeout=60 #主从网络中断时,等待60秒自动连接
read_only=1 #只读模式(同步与super权限用户例外)
注:若想限制同步的库,参数格式如下
replicate-do-db=“数据库名” #允许同步的库
replicate-ignore-db=“数据库名” #不允许同步的库
# service mysqld restart
重启完从数据库,此时,就可以登录主数据库查看主数据库服务器上有哪些从服务器,如下
mysql> show slave hosts;
+-----------+-----------------+------+-------------------+-----------+
| Server_id | Host | Port | Rpl_recovery_rank | Master_id |
+-----------+-----------------+------+-------------------+-----------+
| 201 | 192.168.100.201 | 3306 | 0 | 200 |
+-----------+-----------------+------+-------------------+-----------+
7、登录主数据库,查看主数据库状态里当前使用的binlog和偏移量
mysql> show master status; #显示主数据库服务器的状态
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mysqld-bin.000004 | 120 | | |
+-------------------+----------+--------------+------------------+
File和Postion对应的值mysqld-bin.000004和334要记录下来,下面步骤要用到
说明:
File #正在使用的binlog日志
Position #正在使用binlog日志的偏移量,如图含义是从偏移量位置120开始记录
Binlog_DO_DB #显示准许同步复制的库
Binlog_Ignore_DB #显示不准许同步复制的库
Executed_Gtid_Set #跟binlog日志相似,都是用来主从同步的,默认关闭,两个用一个就可以.
开启Gtid: #没特殊要求不开启
vim /etc/my.cnf
gtid_mode=on
8、从数据库连接主数据库(从数据库上操作)
mysql>change master to
->master_host="192.168.100.200", #主数据库的IP地址
->master_user="slaveuser", #主数据库上授权的用户
->master_password="123456", #授权用户的密码
->master_log_file="localhost-bin.000001", #上一步中File字段里的binlog日志
->master_log_pos=120; #上一步中Postion字段里的偏移量
操作完以上命令,/var/lib/mysql/下会生成4个文件
ls /var/lib/mysql
master.info #连接主数据库服务器的配置信息
relay-log.info #中继日志信息
localhost-relay-bin.000001 #中继日志文件,是主复制过来的日志文件叫中继
localhost-relay-bin.index #中继日志文件列表
9、登录从数据库,开启从数据库里的server_IO与server_SQL进程
mysql>start slave; #开启I0和SQL(停止用:stop slave)
mysql>show slave status\G; #查看I0和SQL进程状态
Slave_IO_Running: YES #必须开启状态
Slave_SQL_Running: YES #必须开启状态
>只有IO-Running和SQL_Running同时为YES,主从才能同步
>执行start slave后,若Slave_IO_Running还是NO状态,1分钟后再查看
10、验证主从是否能同步
登录主数据库并在库test下创建表student
mysql>use test;
mysql>create table student(name char(3),birthday date); #创建表student
mysql> desc student; #查看表结构
+----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| name | char(3) | YES | | NULL | |
| birthday | date | YES | | NULL| |
+----------+---------+------+-----+---------+-------+
登录从数据库,查看是否同步了主数据库创建的表student,如下所示,说明主从能同步了。
mysql>use test;
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| student |
+----------------+
完毕,谢谢。