设为首页 收藏本站
查看: 903|回复: 0

[经验分享] MySQL之主从复制的配置演示

[复制链接]

尚未签到

发表于 2018-10-10 12:28:41 | 显示全部楼层 |阅读模式
  node1:192.168.139.2 主服务器
  node2:192.168.139.4 从服务器
  首先要在node1和node2上安装MySQL,这里不演示
  然后需要对主从进行如下配置:
  master:

  •   启用二进制日志
      log_bin = master-bin  log_bin_index = master-bin.index
  •   选一个唯一的服务器id
      server_id = {0-2^32-1}
  •   创建具有复制权限的用户,专门用来复制
      replication slave 具有从主server上复制二进制日志中事件的权限
      replication client 具有连接主server获取相关信息的权限(这个权限不是必须的)
  slave:

  •   启动中继日志,关闭二进制日志

      relay_log =>
  •   选一个唯一的服务器id
      server_id = {0-2^32-1}
  •   连接主服务器,并开始复制数据
      mysql> change master to master_host='192.168.139.2',master_user='faker',master_password='123',master_log_file='master-bin.000004',master_log_pos=579;
      mysql> start slave;启动从MySQL的复制线程
  下面为配置演示
  [root@node1 mysql]# vim /etc/my.cnf
  [mysqld]
  datadir=/mydata/data
  innodb_file_per_table = 1
  log-bin = master-bin
  log-bin-index = master-bin.index
  binlog_format=mixed
  server_id = 1
  [root@node1 mysql]# service mysqld start
  Starting MySQL............. SUCCESS!
  root@node1 mysql]# mysql -uroot -p
  Enter password:

  mysql> create user faker@'127.0.0.1'>  Query OK, 0 rows affected (0.08 sec)

  mysql> grant replication slave on *.* to 'faker'@'192.168.139.%'>  Query OK, 0 rows affected (0.05 sec)
  mysql> flush privileges;
  Query OK, 0 rows affected (0.03 sec)
  mysql> show master status;
  +-------------------+----------+--------------+------------------+-------------------+
  | File         | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  +-------------------+----------+--------------+------------------+-------------------+
  | master-bin.000004 |    579 |        |              |
  +-------------------+----------+--------------+------------------+-------------------+
  1 row in set (0.00 sec)
  mysql> \q
  Bye
  [root@node2 mysql]# vim /etc/my.cnf
  [mysqld]
  datadir=/mydata/data
  innodb_file_per_table = ON
  #log-bin = master-bin
  #log-bin-index = master-bin.index

  relay-log =>
  relay-log-index =>  server_id = 11
  [root@node2 mysql]# service mysqld start
  Starting MySQL...................... SUCCESS!
  [root@node2 mysql]# mysql -uroot -p
  Enter password:
  mysql> change master to master_host='192.168.139.2',master_user='faker',master_password='123',master_log_file='master-bin.000004',master_log_pos=579;
  Query OK, 0 rows affected, 2 warnings (0.23 sec)
  mysql> show slave status\G
  *************************** 1. row ***************************
  Slave_IO_State:
  Master_Host: 192.168.139.
  Master_User: faker
  Master_Port: 3306
  Connect_Retry: 60 如果连不到主服务器,60后再重试一次
  Master_Log_File: master-bin.000004 当前读取的主服务器二进制日志
  Read_Master_Log_Pos: 579    当前读取的主服务器二进制日志位置

  Relay_Log_File:>  Relay_Log_Pos: 4   当前中继日志中的事件位置
  Relay_Master_Log_File: master-bin.000004  正在同步的主服务器二进制日志
  Slave_IO_Running: No 从服务器上的IO 线程未启用
  Slave_SQL_Running: No 从服务器上的SQL线程未启用
  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 跳过了0个
  Exec_Master_Log_Pos: 579 当前执行到了那个位置
  Relay_Log_Space: 120
  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: NULL 从服务器比主服务器慢多少秒
  Master_SSL_Verify_Server_Cert: No
  Last_SQL_Errno: 0
  Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
  Master_Server_Id: 0
  Master_UUID:
  Master_Info_File: /mydata/data/master.info
  SQL_Delay: 0
  SQL_Remaining_Delay: NULL
  Slave_SQL_Running_State:
  Master_Retry_Count: 86400
  Master_Bind:
  Last_IO_Error_Timestamp:
  Last_SQL_Error_Timestamp:
  Master_SSL_Crl:
  Master_SSL_Crlpath:
  Executed_Gtid_Set:
  Auto_Position: 0
  1 row in set (0.00 sec)
  mysql> start slave;
  Query OK, 0 rows affected (0.07 sec)
  主:
  mysql> create database zxl;
  Query OK, 1 row affected (0.51 sec)
  mysql>
  从:
  mysql> show databases;
  +--------------------+
  | Database
  +--------------------+
  | information_schema |
  | mysql
  | performance_schema |
  | test
  | zxl           |
  +--------------------+
  5 rows in set (0.00 sec)
  如何让从服务器只读
  [root@node2 data]# vim /etc/my.cnf
  read_only = ON
  [root@node2 data]# service mysqld restart
  Shutting down MySQL.. SUCCESS!
  Starting MySQL................ SUCCESS!
  [root@node2 data]# mysql -uroot -p
  Enter password:
  mysql> show global variables like 'read_only';
  +---------------+-------+
  | Variable_name | Value |
  +---------------+-------+
  | read_only   | ON    |
  +---------------+-------+
  1 row in set (0.12 sec)
  mysql> show slave status\G
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  可以看出mysql重启后IO和sql线程自动启动呢,但是IO线程要连接到主server的dump线程才能启动,且要指定用户密码,日志事件等,怎么会自动启动呢?
  [root@node2 mysql]# file master.info
  master.info: ASCIItext
  [root@node2 data]# cat master.info
  23
  master-bin.000004
  670
  192.168.139.2 主serverIP
  faker 用户
  123 密码
  3306 端口
  60 重试时间
  0
  [root@node2 data]# ll master.info
  -rw-rw----. 1 mysql mysql 125 Feb 17 15:53 master.info

  [root@node2 data]# cat>  7
  ./relay-log.000002 当前使用的中继日志
  375  日志位置
  master-bin.000004 当前读取的二进制日志
  670 二进制日志位置
  0
  0
  1
  上面两个文件master.info和relay-log.info保存了IO线程自动启动所需的内容
  但是有的时候可能在主server上进行了误删除操作,这时可以利用主从复制上的时间差,立马让从server停止复制,在从server上找回在主server上误删除的数据
  >stop slave; 便可直接停止sql和IO线程
  Percona公司还提供了专门管理主从复制的工具:
  [root@node2 data]# yum install percona-toolkit
  安装完会生成许多pt开头的命令
  如:
  pt-slave-delay 可以有意让从复制比主慢一定时间,出错可以利用时间差补救
  pt-summary   收集当前服务器的CPU和内存大小等信息
  pt-diskstats 显示磁IO统计数据
  pt-index-usage 显示当前索引使用情况
  pt-table-checksum 检查主从上的数据是否一致
  pt-ioprofile  评估当前磁盘的IO能力


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-619958-1-1.html 上篇帖子: 安装mysql过程 下篇帖子: MySQL学习笔记1 mysql简介
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表