Mysql内建的复制功能是构建大型,高性能应用程序的基础。将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
MySQL支持的复制类型:
(1).基于语句的复制: 在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
(2).基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍. 从mysql5.0开始支持
(3).混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
实验环境 (操作系统均为CentOS6.8)
- 主数据库:192.168.100.10
- 从数据库:192.168.100.20
1. 安装启动数据库,并设置密码
yum -y install mysql mysql-server mysql-devel
service mysqld restart #启动数据库
mysqladmin -u root password '123456' #设置root用户密码
2.修改主库my.cnf主要设置个不一样的ID,以及同步的数据库的名字,我一般用vim 来完成,vim /etc/my.cnf 在[mysqld]中加入内容如下
server-id=1 #添加一个唯一的id
log-bin=binlog #启用日志
port=3306
重启服务使配置生效
service mysqld restart
3.登录主库赋予从库权限账号,允许用户在主库上读取日志(用户名:admin,密码:123456)
mysql -uroot -p123456
grant replication slave on *.* to 'admin'@'192.168.100.20' identified by '123456';
4.锁主库表,显示主库信息
flush tables with read lock;
显示主库信息
show master status;
mysql> show master status;
+---------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000002 | 106 | haocheng | |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec)
(记录file、position,从库设置将会用到)
5.修改从库my.cnf ,如下:
vim /etc/my.cnf
[mysqld]
#slave
server-id=2
#master-host=192.168.100.10
#master-user=admin
#master-password=123456
(注释内容为了方便以后管理)
重启服务使配置生效
service mysqld restart
6.在从库上设置同步
mysql -u root -p123456
mysql>slave stop;
mysql>change master to master_host='192.168.100.10',master_user='admin',master_password ='123456',master_log_file='binlog.000002',master_log_pos=106
mysql>slave start;
7.查看从库状态
mysql>show slave status\G;
Slave_IO_Running:YES
Slave_SQL_Running:YES #当这两条语句均为YES则为同步配置成功