Mysql主从复制

pfmm 8年前

主从复制功能通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间,

Mysql主从复制的优点如下:

  • 增加健壮性,主服务器出问题,切换到从服务器作为备份。

  • 优化响应时间,不要同时在主从服务器上进行更新,可能会引起冲突

  • 在从服务器备份过程中,主服务器继续处理更新

主从复制工作原理:

  • 主服务器将用户对数据库的更新操作以二进制格式保存在 Binary Log 日志文件中,然后由Binlog Dump线程将BinaryLog日志文件传输给服务器。

  • 从服务器通过I/O线程将主服务器Binary LOG文件中的更新操作复制到一个Relay Log 中继日志文件

  • 从服务器通过SQL线程 将Relay Log 日志文件中的操作依次在本地执行,从而实现主从同步


主从复制的配置

  1. 确保主服务器的版本不高于从服务器的版本

  2. 在主服务器中授予以个连接账号

GRANT replication slave ON *.*TO root@'%', //表示要创建用户名为ROOT的用户,  IDENTIFIED BY '110';                        //从服务器连接主服务器的密码

   3,配置主服务器

    Windows 打开my.ini,Linux 用户打开my.cnf

log-bin = mysql-bin  server-id                //我的Mysql版本是5.5.20 默认已经配置好了

4,默认配置之后重启主服务器

5,运行

mysql>  SHOW MASTER STATUS;

Mysql主从复制

File表示服务器正在使用的 binlog文件(表示从服务器从这个文件中复制),Position 的值与binlog的文件大小相同,表示下一个被记录事件的位置

其中Binlog_Do_DB是默认使用哪个数据库,Binlog_Ignore_DB是忽略掉哪个数据库

6,配置从服务器

从服务器的server_id 是与主服务器不同的

log-bin = mysql-bin  server_id = 2  log_slave_updates = 1 //允许备库将其重要的事件也记录到自身的二进制文件中  read_only             //该选项会阻止任何没有特权的权限线程修改数据

7,指定主服务器信息

CHANGE MASTER TO MASTER_HOST = '192.168.0.10',     //    主服务器的IP地址  MASTER_USER = 'root',  MASTER_PASSWORD = '110',  MASTER_LOG_FILE ='mysql-bin.000002',  MASTER_LOG_POS = 0;                //从日志的开始位置开始读

8,查看是否设置正确

SHOW SLAVE STATUS\G

  Mysql主从复制

执行语句  start slave

Mysql主从复制

看到服务器的I/O线程 和SQL线程都已经开始运行

我们在主服务器中建立一个数据库        test1 

Mysql主从复制

能看到我们的从服务器中也出现了 test1 插入数据等同理

Mysql主从复制

错误问题   

当我们从从服务器的MYSQL命令行退出之后

再次进入到MYSQL 命令行会报错 这是因为 权限的问题导致的

Mysql主从复制

此时我们可以进入 /var/lib/mysql/中 删除掉  (慎重,删除之后表就找不回来了

Mysql主从复制

sudo /etc/init.d/mysql restart  //重启MYSQL服务器

结果发现还是会报错

我们进入/var/log/mysql/error.log 中查看错误

Mysql主从复制

发现我们的端口3306已经被占用了

netstat -anp|grep 3306            //查看正在使用3306端口的程序  //找到他的PID  sudo kill -9 PID             //结束掉进程  sudo /etc/init.d/mysql restart  //再次重启MYSQL服务器  su mysql  //使用安全模式启动即可