主从复制解决的问题?
(1)数据平衡
(2)负载均衡
(3)备份
(4)高可用和容错行
1、实现原理
(1)MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或其他服务器充当从服务器
(2)MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除)
(3)每个从服务器从主服务器接受主服务器已经记录到其二进制日志的保存和更新
2、实现步骤
(1)Matser将改变记录到二进制日志(binary log)中
(2)Slave(监听)将Master的binary log events拷贝到它的中继日志(relay log)
(3)Slave重做中继日志中的事件,将改变它自己的数据
3、准备两台服务器,一台作为主服务器,一台作为从服务器(或多台)
4、主服务器配置
(1)进入配置文件,修改/etc/my.cnf
log-bin = mysql-bin // 日志名
server-id = 1 // 用来标识最初server是从哪里写入的,必须且唯一
(2)查看是否生成日志
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql-bin.000001是文件名,写满之后会新开.000002/3/3......
position是位置,会随着写入而增大
5、从服务器配置
同样修改/etc/my.cnf
relay-log = mysql-relay-bin
server-id = 151
mysql> grant replication slave on *.* to slave01@192.168.xxx.xxx indentified by '123456';
*.*代表所有表、所有库
意思是:允许用户slave01以密码123456在主机192.168.xxx.xxx上访问当前的master
7、从服务器监听主服务器(在从服务器中配置)
(1)首先确定能否连通主服务器的网络
[root@localhost etc]# ping 192.168.xxx.xxx // 主的ip
(2)指向主服务器
mysql> stop slave; // 先关闭
mysql> change master to
master_host = '主ip',
master_port = 3306,
master_user = 'slave01', // 上一步的用户
master_password = '123456', // 上一步的密码
master_log_file = 'mysql-bin.000001',
master_log_pos = 151; // 是第四步下的(2)中的position,建议重新执行第四步,将position写在这,一定比原来的大
(3)查看从服务器状态
mysql> show slave status/G;
当下面两个值为yes时,监听成功Slave_IO_Running: Yes
Slave_SQL_Running: Yes
8、配置完成
9、测试
在主库中操作,查看结果,去从库中查看结果是否相同