mysql主从

MySQL Replication 概述
MySQL Replication 俗称MySQL AB复制(主从,双机热备),从库以一定的频率去读取主库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到同步效果。

 

MySQL 支持的复制类型
基于语句的复制 在主服务器上执行的SQL语句,在从服务器上执行同样的语句,MySQL默认采用基于语句的复制,效率比较高
基于行的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍
混合类型的复制 默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用行

复制的工作过程
1.在每个事务更新完数据完成之前,Master在二进制日志(Binary log,binlog)记录这些改变,写入二进制日志完成后,Master通知存储引擎提交事务
2.Slave将Master的Binary log复制到其中中继日志,首先Slave开始一个工作线程-I/O线程在Master上打开一个普通的连接,然后开始Binlog dump process,Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,它会催眠并等待Master产生新的事件,I/O线程将这些事件写入中继日志。
3.SQL Slave Thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新Slave的数据,使其与Master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会在OS的缓存中,所以中继日志的开销很小。

 

1:192.168.16.238 主master

 192.168.16.239 从slave

 

[root@shell ~]# cat /etc/issue
Red Hat Enterprise Linux Server release 6.3 (Santiago)
Kernel \r on an \m

1)通过yum安装mysql

yum -y install mysql 安装客户端

 

yum -y install mysql-server 安装服务端

yum install mysql-devel

 

[root@oracle10g yum.repos.d]# rpm -qa |grep mysql
mysql-server-5.1.61-4.el6.x86_64
mysql-libs-5.1.61-4.el6.x86_64
mysql-devel-5.1.61-4.el6.x86_64
mysql-5.1.61-4.el6.x86_64

我们可以看到版本是5.1

 

service mysqld start

 

尝试登陆mysql数据库: 

mysql数据库结构展示:

   

2)给mysql创建一个密码。

[root@oracle10g yum.repos.d]# mysqladmin -u root password 123456

 

3)service iptables stop

   setenforce 0               关闭防火墙

4)建立时间同步,本次以master为主

  yum -y install ntp

 

  vi /etc/ntpd.conf

  server 127.127.1.0
  fudge 127.127.1.0 stratum 8  在最下面加入本段参数,说明:127.127.1.0 本地硬件时钟(由于时间服务器同步需要大概5分钟左右,如果在此期间执行ntpdate 61.129.42.44 会出现 8 Jun 20:57:14 ntpdate[22982]: no server suitable for synchronization found 的错误)

      

      在slave服务端加入定时同步任务:1 1 * * * /usr/sbin/ntpdate 192.168.16.238 && /sbin/clock -systohc

  

5)配置master服务端

  vi /etc/my.cnf

  

  主机必须的配置项:
  log-bin //自定义,比如 log-bin=mysql-bin
  server_id //为server起一个唯一的id,默认是1,推荐使用IP的最后一节。
  从机必须的配置项:
  server_id //为server起一个唯一的id,默认是1,推荐使用IP的最后一节.

  注意:一般,我们也会为从机设定log-bin,这是因为默认的log-bin文件是根据主机名命名的,一旦机器更改主机名就会出问题,再者保持主从机的配制一致也方便做主从机切换!

  主机可选的配置项:(用于配置主机哪些库会做二进制日志用以Replicate)
  binlog-do-db
  binlog-ignore-db
  从机可选的配置项:(用于配置从机会Replicate哪些库和表)
  replicate-do-db, replicate-ignore-db
  replicate-do-table, replicate-ignore-table
  replicate-wild-do-table
  replicate-wild-ignore-table

      

 

    重启master服务端

  service mysqld restart 

    

  创建Replication用户,并赋权(使得用户可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是说这个权限是用于授予账户监视Replication状况的权力,

  update user set hosts='192.168.16.%' where user='myslave_zdsoft';

 

  replication slave: 用于复制型从属服务器(从主服务器中读取二进制日志事件)

 

  查看master状态

  

  供Slave DB连接时使用,记录下File和Position的值

  

  从库连接主库进行测试,如果连接成功说明主库配置成功
  

(update user set host='%' where host='localhost';

 FLUSH PRIVILEGES; 

mysqldump -u root -h127-p123456 --all-databases > /root/alldbbackup.sql导出数据库

 

[root@shell ~]# mysql -u root -h 192.168.16.238 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 5.1.61-log Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

将库备份导入到从库当中      

scp ~/*.sql 192.168.16.239:~

 

导入备份

mysql -u root -p < /root/*.sql

 

在主库创建一个test1的库

create database test1;

 

在 Slave服务器授权,启动从库,进行主从库数据同步

[root@shell ~]# mysql -u root -p123456
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.61 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.16.238',
-> MASTER_USER='myslave_zdsoft',
-> MASTER_PASSWORD='654321',
-> MASTER_LOG_FILE='mysql-binlog.000019',
-> MASTER_LOG_POS=106;
Query OK, 0 rows affected (0.30 sec)

 

参数说明:
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name', //主服务器的IP地址
-> MASTER_USER='replication_user_name', //同步数据库的用户
-> MASTER_PASSWORD='replication_password', //同步数据库的密码
-> MASTER_LOG_FILE='recorded_log_file_name', //主服务器二进制日志的文件名(前面要求记录的参数)
-> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记录的参数)

根据在主库执行的show master status 填写

 

start slave;

show slave status/G

 

如上图所示,库已经同步到从库.

 

create table a(name varchar(12),year varchar(12)); 在test1库里,创建表

 

 

 

 

 

 参数说明:

 log-bin = mysql-bin #复制过程即 Slave 从 Master 端获取该日志再执行日志记录的操作

 server-id = 1 #1 代表 master 服务

 binlog-do-db = backup#要同步的库 backup

 binlog-ignore-db = mysql #不同步的库,初始所有库默认为不同步,但为了明确最好加上 

 

server-id = 2 #2 代表 slave 服务
replicate-ignore-table = backup.tb2 #不同步 backup 库的 tb2 表

skip-slave-start #防止复制随着 mysql 启动而自动启动。即 slave 端的 mysql 服务重启后需手动
来启动主从复制(slave start) ,最好加上,slave 端数据库服务重启后手动启动 slave 比较安全

如果 slave 服务也同时作为另一个 mysql 服务的 master 服务,则配置文件[mysqld] 节点内容还需要加上 log-slave-updates

 

 

1:测试log-bin 后面的参数是否可以随便填 ( 此参数跟slave配置的 relay-log-bin参数原理一致)

  1):log-bin=mysql-master

    show master status

    

mysql> show master status;
+---------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+----------+--------------+------------------+
| mysql-master.000001 | 106 | | |
+---------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

我们可以看到file文件的名字变成了,mysql-master , log-bin参数为bin-log文件的名的前缀

2)测试 binlog-do-db参数,

   binlog-do-db=test2

   加到master中

  分别在master库中创建test2 test3

  create database test2;

  create database test3;

  

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
| test1 |
| test2 |
+--------------------+
5 rows in set (0.00 sec)

可以看到test2同步了,test3没有同步

3)replicate-ignore-table = test2.b 并加入skip-slave-start参数,使之不随mysql启动而启动

  在slave服务器加入上述参数;

 

  

  可以看到skip-slave-start参数已经生效。

  

  

  replicate-ignore-table = test2.b 参数也生效了

 

 

总结:经过本次配置,主从复制简单来说就是slave通过配置的myslave_zdsoft(Replication)用户,读取master通过master配置的log-bin日志文件,通过分析,插入到从库中。

 

posted @ 2015-06-08 23:59  玩石  阅读(566)  评论(0编辑  收藏  举报