mysql主从复制要点

普通文件的数据同步
1.NFS 网络共享可以同步数据
2samba共享数据
3定时任务或守护进程结合rsync +scp
4 inotify +rsync触发实时数据同步
5ftp数据同步
6ssh key+scp/rsync
mysql支持单向,双向,链式级联,实时异步复制,一台服务器充当服务器,而另一个服务器充当
slave服务器
应用场景有利于数据库架构的健壮性,提升访问速度和易于管理
主从服务器互为备份
主从服务器架构的设置,可以大大的加强数据库架构的健壮性,例如:当主服务器
出现问题时,我们可以人工或自动的切换到服务器继续提供服务
这类似我们前面课程中的nfs存储数据通过inotify+rsync同步备份到备份的nfs
非常类似,只不过mysql的同步方案,是其自带的工具
非人为的硬件,服务故障,对于人为的drop,delete无能为力
主从服务器读写分离承担网站的压力
主从服务器架构可通过php(大型网站),java或代理软件(mysqlproxy,amoeba)对用户的请求实现读写分离,则通过
从服务器上仅仅用户的select查询请求,降低用户
门户网站分布式dbproxy,(读写分离,hash负债均衡,健康检查)
一主多从
如何实现mysql主从读写分离
1.通过程序实现读写分离性能,效率最佳,推荐
php和java程序都可以通过设置多个连接文件的实现对数据库的读写分离,既当select
时,就去连接读库的连接文件,当update insert delete时就连接写库的连接文件
2通过软件实现读写分离
mysql-proxy,amoeba 等代理软件也可以实现读写分离功能,但最常用的还是利用程序实现读写分离
注意事项:
1从库两个线程io(relay log),master(master info)主库io
2连接ip用户名密码端口binlog名,pos
3确保主从库基于这个位置点是有完整数据的
4.在master节点建立专门用于从库同步的账号
5.主库要打开binlog开关,否者没办法实现同步
6.从库打开start slave;
mysql主从复制过程
1.slave服务器上执行start slave开启主从复制的开关
2.此时slave服务器的io线程会通过master 上授权的用户权限请求连接master服务器
并且请求从指定binlog日志问件的指定位置(日志文件名和位置就是在配置主从服务器时执行change master命令时指定的))
3master服务接收到来自slave服务器的io线程请求之后,master服务器上负责复制io
线程更具slave服务器的io请求信息读取指定binlog日志文件指定的binlog日志信息
然后返回给slave端的io线程新的binlog文件名以及下一个指定更新的位置
4当master服务器的io线程获取到来自master服务器上的io线程发送日志内容及其日志位置
点之后,讲binlog日志内容依次写到slave端自身的relay-log既中继日志文件mysql-relay-bin.xxx
的末端,并将新的binlog文件名和位置记录到master-info文件中,以便下一次读取master端新的
binlog日志能够告诉master服务器需要从新的binlog日志内容
5slave服务器端的sql线程将会实时的检查本地的relaylog 中新加的日志内容,然后及时的
把log文件中的内容解析在master端曾经执行的sql语句的内容,并在自身slave服务器上
按语句的顺序执行应用这些sql语句,用完后清理应用过的日志
6经过上面的过程,就可以确保在master和slave端执行了同样多的sql语句,当复制
状态正常情况下,master端和slave端的数据是完全一样的
从库再写binlog的时候不仅要写binlog而且还要修改log-slave-update
[root@localhost data]# killall mysqld;
[root@localhost data]# ps aux |grep 330
root     10050  0.0  0.0 103260   848 pts/1    S+   01:19   0:00 grep 330
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &
[root@localhost 3306]# ss -lnt |grep 330
LISTEN     0      50                        *:3307                     *:*     
LISTEN     0      50                        *:3306                     *:*     
定义3306为主(my.cnf打开binlog,server_id=1)
定义3307为从
1.注意上面的两个参数要放在my.cnf中的[mysqld]模块下,不然要出错
2.server-id 的值最好使用服务器ip地址最后8位如19 目的是为了防止不同机器或者
实例id重复0《serverid》2^32-1的自然数
3.要在my.cnf里配置文件中查找相关参数,并按照要求更改,不存在时修改参数,不能重复
4.修改my.cnf后要重新启动数据库,命名为/data/3306/data restart 注意确认要重启了
192.168.88.172
mysql> GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*TO root@'192.168.88.172' IDENTIFIED BY 'admin';         
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

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



mysql> flush table with read lock ;
Query OK, 0 rows affected (0.01 sec)
在master上新建一个窗口
[root@localhost 3306]# mysqldump -uroot -padmin -S /data/3306/mysql.sock -A -B --events |gzip >~/rep.sql.gz;

[root@localhost ~]# gzip -d rep.sql.gz
[root@localhost ~]# mysqldump -uroot -padmin -S /data/3306/mysql.sock -A -B --events --master-data=2 >~/abc.sql
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000006 |      346 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
把主库以前的东西写在从库,以保持一致
[root@localhost 3306]#  mysql -uroot -padmin -S /data/3307/mysql.sock <~/abc.sql;
在从库;
change master to
master_host='192.168.88.172',
master_user='root',master_password='admin',
master_log_file='mysql-bin.000006',
master_log_pos=346;
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.88.172
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 346
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes(成功)
            Slave_SQL_Running: Yes(成功)
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 346
              Relay_Log_Space: 403
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0(落后主库的秒数)
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
1 row in set (0.00 sec)

ERROR:
No query specified

mysql> CREATE database tt01;在主库上执行
Query OK, 1 row affected (0.00 sec)
从库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d3306              |
| mysql              |
| performance_schema |
| test               |
| tt01               |
+--------------------+
6 rows in set (0.05 sec)

root@localhost ~]# cd /data/3307/data
[root@localhost data]# ls
d3306    ib_logfile0  ib_logfile2  mysql             performance_schema  test
ibdata1  ib_logfile1  master.info给io线程  mysqld_multi.log  relay-log.info 给socket     tt01
--master-data不需要文件点




转载于:https://my.oschina.net/goudingcheng/blog/596493

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值