概述
对任何一个数据库的操作都自动应用到另外一个数据库, 始终保持两个数据库中的数据一致.
这样做有如下几点好处:
可以做灾备, 其中一个坏了可以切换到另一个.
可以做负载均衡, 可以将请求分摊到其中任何一台上, 提高网站吞吐量. 对于异地热备, 尤其适合灾备.
MySQL 主从复制的方式
Master 数据库操作的任何数据库的时候, 都会将操作记录写入到 biglog 日志文件当中
Slave 数据库通过网络获取到主数据库的日志文件, 写入本地日志系统 , 然后一条条的将数据库事件在数据库中完成
Slave 重做中继日志中的事件, 将 Master 上的改变反映到它自己的数据库中, 所以两端的数据是完全一样的.
环境
操作系统: CentOS
MySQL 版本: MySQL-5.6.26 (主从两者数据库版本必须保持一致)
Master1 配置
1 开启 binlog 日志功能
- VIM /etc/my.cnf
- server-id=6
- log-bin=MySQL-bin
2 重启 MySQL 登陆并授权
- MySQL -uroot -p123456
- grant replication slave, replication client on *.* to 'repl'@'10.211.55.7' identified by '123456';
ip 地址为 slave 服务器的 ip 地址
3 查看日志状态
show master status;
Master2 配置
1 开启 binlog 日志功能
- VIM /etc/my.cnf
- server-id=8
- log-bin=MySQL-bin
2 重启 MySQL 登陆并授权
- MySQL -uroot -p123456
- grant replication slave, replication client on *.* to 'repl'@'10.211.55.7' identified by '123456';
ip 地址为 slave 服务器的 ip 地址
3 查看日志状态
show master status;
Slave 配置
1 修改配置文件 (注意 slave 的默认数据库启动的端口必须关闭 service MySQL stop)
- VIM /etc/my.cnf
- [mysqld]
- binlog-ignore-db=MySQL
- binlog_format=mixed
- expire_logs_days=7
- slave_skip_errors=1062
- relay_log=MySQL-relay-bin
- log_slave_updates=1
- [mysqld_muliti]
- mysqld=/usr/bin/mysqld_safe
- mysqladmin=/usr/bin/mysqladmin
- user=root
- password=123456
- [mysqld6]
- port=3306
- datadir=/home/MySQL/data6
- pid-file=/home/MySQL/data6/MySQL.pid
- socket=/home/MySQL/data6/MySQL.sock
- user=MySQL
- server-id=7
- [mysqld8]
- port=3307
- datadir=/home/MySQL/data8
- pid-file=/home/MySQL/data8/MySQL.pid
- socket=/home/MySQL/data8/MySQL.sock
- user=MySQL
- server-id=7
2 初始化生成目录
- /usr/local/MySQL/scripts/mysql_install_db --user=MySQL --basedir=/usr/local/MySQL --datadir=/home/MySQL/data6 &
- /usr/local/MySQL/scripts/mysql_install_db --user=MySQL --basedir=/usr/local/MySQL --datadir=/home/MySQL/data8 &
3 修改目录权限
- chown -R MySQL /home/MySQL/data6
- chown -R MySQL /home/MySQL/data8
4 启动服务
- mysqld_multi --defaults-file=/etc/my.cnf start 6
- mysqld_multi --defaults-file=/etc/my.cnf start 8
5 登录测试 (并分别做授权)
- MySQL -P 3306 -S /home/MySQL/data6/MySQL.sock
- MySQL> change master to master_host='10.211.55.6', master_user='repl', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=120;
- MySQL> start slave;
- MySQL -P 3307 -S /home/MySQL/data8/MySQL.sock
- MySQL> change master to master_host='10.211.55.8', master_user='repl', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=120;
- MySQL> start slave;
ok 就这样 完成了
来源: http://www.bubuko.com/infodetail-2879015.html