MySQL主从

本文介绍了MySQL主从复制的基本原理及其配置步骤。通过主从复制可以提高系统的可用性和负载均衡,实现数据备份的同时减少主服务器的压力。文章详细阐述了如何在主服务器上创建同步用户、调整配置文件,以及如何在从服务器上进行相应的设置。

  MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。
  为什么使用主从复制?
  1、主服务器/从服务器设置增加了健壮性。主服务器出现问题时,你可以切换到从服务器作为备份。
  2、通过在主服务器和从服务器之间切分处理客户查询的负荷,可以得到更好的客户响应时间。但是不要同时在主从服务器上进行更新,这样可能引起冲突。
  3、使用复制的另一个好处是可以使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新。
  MySQL使用3个线程来执行复制功能(其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让主服务器发送二进制日志。主服务器创建一个线程将二进制日志中的内容发送到从服务器。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,从服务器使用此线程读取中继日志并执行日志中包含的更新。SHOW PROCESSLIST语句可以查询在主服务器上和从服务器上发生的关于复制的信息。
  默认中继日志使用host_name-relay-bin.nnnnnn形式的文件名,其中host_name是从服务器主机名,nnnnnn是序列号。用连续序列号来创建连续中继日志文件,从000001开始。从服务器跟踪中继日志索引文件来识别目前正使用的中继日志。默认中继日志索引文件名为host_name-relay-bin.index。在默认情况,这些文件在从服务器的数据目录中被创建。中继日志与二进制日志的格式相同,并且可以用mysqlbinlog读取。当SQL线程执行完中继日志中的所有事件后,中继日志将会被自动删除。
  从服务器在数据目录中另外创建两个状态文件--master.info和relay-log.info。状态文件保存在硬盘上,从服务器关闭时不会丢失。下次从服务器启动时,读取这些文件以确定它已经从主服务器读取了多少二进制日志,以及处理自己的中继日志的程度。
  主master:192.168.5.60
  从slave:192.168.5.61
  1、在master mysql创建同步用户
  grant emuser slave,file on *.* to 'emuser'@'192.168.5.61' identified by '123456';
  flush privileges;
  修改master的my.cnf的配置
  wait_timeout = 30000000
  interactive-timeout = 30000000
  binlog-do-db=cdn_view  #设置二进制日志记录的库
  log-bin=mysql-bin         #打开mysql二进制日志
  binlog-ignore-db=mysql   ##设置二进制日志不记录的库
  server-id = 12760         #设置mysql_id,主从不能相同
  long_query_time = 5
  expire_logs_days= 3
  2、修改slave的my.cnf的配置
  wait_timeout = 30000000
  interactive-timeout = 30000000
  log-bin=mysql-bin
  server-id = 12761
  replicate-do-db=cdn_view   #设置同步的库
  replicate-ignore-db=mysql  #设置不同步的库
  log-slave-updates         #同步后记录二进制日志
  slave-skip-errors=all
  slave-net-timeout=60
  sync_binlog=1
  binlog_format=mixed
  ############################################################################
  分别重启主从mysqld服务,登录主mysql,在主上执行flush tables with read lock;
  然后将cdn_view数据库的数据copy到从上,并记录下主上show master status\G的结果:
  mysql> show master status\G;
  *************************** 1. row ***************************
  File: mysql-bin.000009
  Position: 341
  Binlog_Do_DB: cdn_view
  Binlog_Ignore_DB: mysql
  1 row in set (0.00 sec)
  然后执行unlock tables;
  登录从mysql,在从上执行:
  stop slave;
  change master to master_host='192.168.5.60',master_user='emuser',master_password='123456', master_log_file='mysql-bin.000009', master_log_pos=341;
  start slave;
  show slave status\G;
  如果出现如下信息说明主从同步成功。
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

 

来自http://web.hackbase.com/tech/2011-07-11/64447.html

### 获取当前服务器IP地址并配置MySQL主从复制 #### 获取当前服务器的IP地址 在Linux系统中,可以通过多种方式获取当前服务器的IP地址。以下是一些常用的方法: ##### 使用 `hostname` 命令获取IP地址 ```bash ip=$(hostname -I) echo "本机 IP 地址为:$ip" [^3] ``` ##### 使用 `ifconfig` 命令获取IP地址 ```bash ip=$(ifconfig | grep -E 'inet [0-9]' | awk '{print $2}') echo "本机 IP 地址为:$ip" [^3] ``` ##### 获取IP地址的最后一位 ```bash ip_last=$(ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addr:" | cut -d'.' -f4) echo "当前 IP 地址的最后一位为:$ip_last" [^4] ``` #### 配置MySQL主从复制 MySQL主从复制是一种常见的数据库高可用方案,主服务器将数据更改记录到二进制日志中,从服务器读取这些日志并在本地重放,从而实现数据同步。 ##### 在主服务器上配置复制用户 在主服务器上创建一个用于复制的用户,并授予相应的权限: ```bash docker exec -it ${master_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof grant replication slave on *.* to '${replication_user}'@'%' identified by '${mysql_passwd}'; eof" ``` 刷新权限以确保新创建的用户生效: ```bash docker exec -it ${master_name} /bin/bash -c "mysql -h${mysql_address} -P${master_port} -u${mysql_user} -p${mysql_passwd} -e 'flush privileges;'" ``` ##### 在从服务器上配置主服务器信息 在从服务器上执行以下命令,连接到主服务器并设置复制信息: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof change master to master_host='${master_ip}', master_user='${replication_user}', master_password='${mysql_passwd}', master_log_file='mysql-bin.000001', master_log_pos= 4; eof" ``` 启动从服务器的复制进程: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'start slave;'" ``` ##### 检查从服务器状态 可以通过以下命令检查从服务器的复制状态: ```bash docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'show slave status\G'" ``` 确保输出中的 `Slave_IO_Running` 和 `Slave_SQL_Running` 状态为 `Yes`,表示复制正常运行。 #### 示例:完整配置流程 以下是一个完整的Shell脚本示例,展示了如何获取当前服务器的IP地址,并配置MySQL主从复制: ```bash #!/bin/bash # 获取当前服务器的IP地址 ip=$(hostname -I) # 主服务器和从服务器的名称 master_name="mysql-master" slave_name="mysql-slave" # MySQL相关参数 mysql_user="root" mysql_passwd="root_password" replication_user="replica_user" master_ip="192.168.1.100" # 主服务器IP地址 # 在主服务器上创建复制用户 docker exec -it ${master_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof grant replication slave on *.* to '${replication_user}'@'%' identified by '${mysql_passwd}'; flush privileges; eof" # 在从服务器上配置主服务器信息 docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} << eof change master to master_host='${master_ip}', master_user='${replication_user}', master_password='${mysql_passwd}', master_log_file='mysql-bin.000001', master_log_pos=4; start slave; eof" # 检查从服务器状态 docker exec -it ${slave_name} /bin/bash -c "mysql -u${mysql_user} -p${mysql_passwd} -e 'show slave status\G'" ``` 通过上述步骤,可以实现MySQL主从复制的配置,并利用Shell脚本自动化相关操作。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值