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

[经验分享] mysql主从复制的原理及配置实现

[复制链接]

尚未签到

发表于 2018-10-1 09:44:39 | 显示全部楼层 |阅读模式
  mysql的复制类型:
  1.基于语句的复制:主服务器上面执行的语句在从服务器上面再执行一遍,在mysql-3.23版本以后支持
  存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能是不同一个用户
  2.基于行的复制:把主服务器上面改编后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的,在mysql-5.0版本以后引入
  存在的问题:比如一个工资表中有一万个用户,我们把每个用户的工资+1000,那么基于行的复制则要复制一万行的内容,由此造成的开销比较大,而基于语句的复制仅仅一条语句就可以了
  3.混合类型的复制:mysql默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,mysql会自动进行选择
  mysql主从复制架构,读操作可以在所有的服务器上面进行,而写操作只能在主服务器上面进行,主从复制架构给读操作提供了扩展,当写操作也比较多,同时多台从服务器还要从主服务器上面同步数据,单主模型的复制中主服务器势必会成为性能瓶颈
  mysql主从复制的工作原理:如下图所示
  主服务器上面的任何修改都会保存在二进制日志Binary log里面,从服务器上面启动一个I/O thread实际上面就是一个主服务器的客户端进程,连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log里面,从服务器上面开启一个SQL thread定时检查Realy log,如果发现有更改立即把更改的内容在本机上面执行一遍
DSC0000.jpg

  mysql主从复制的配置
  这里我使用两台虚拟机192.168.1.1(主)和192.168.1.2(从)
  首先安装mysql,我这里使用mysql官方上面下载的解压缩后就能直接运行的版本,当然需要稍微设置一下
  1.解压的目录必须放在/usr/local下面,名字叫mysql
  2.创建mysql用户和组,把/usr/local/mysql里面的所有文件和目录的属主和属组都设置为mysql
  3.mkdir -pv /mydata/data,执行初始化脚本/usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data指定数据文件位置
  4.初始化执行过之后把/usr/local/mysql目录的属主和属组更改为root:mysql
  5.cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  chkconfig --add mysqld
  6.cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf 复制出来一个配置文件
  在/usr/local/mysql/support-files目录下面有多个配置文件
  my-huge.cnf(大于512M内存),my-large.cnf(512M内存),my-medium.cnf(128-256M内存),my-small.cnf(小于128M内存),这里我的内存是512M的所以使用large
  7.编辑/etc/my.cnf找到[mysqld],在下面添加 datadir=/mydata/data
  8.export PATH=$PATH:/usr/local/mysql/bin
  打开/etc/profile文件找到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC在这句之前添加export PATH=$PATH:/usr/local/mysql/bin 就会对所有用户有效并且开机自动生效了
  9.告知系统mysql库文件的存放位置 编辑/etc/ld.so.conf.d/mysql.conf 添加/usr/local/mysql/lib
  ldconfig -v |grep mysql ldconfig会按照系统库文件的搜索路径把系统中所有的库文件重新加载一遍
  10.告知系统mysql头文件的位置 ln -sv /usr/local/mysql/include /usr/include/mysql(系统中所有的头文件都放在这个目录中)
  11.配置mysql的man手册页 vi /etc/man.config添加 MANPATH=/usr/local/mysql/man
  主服务器上面
  1.配置server-id,主服务器的server-id一般为1,server-id主要是为了避免在环状架构中出现循环复制
  2.启动二进制日志
  3.建立一个有复制权限的用户帐号
  vi /etc/my.cnf
  log-bin=master-bin 二进制文件的名字
  log-bin-index=master-bin.index 正在使用的二进制文件的索引目录
  binlog-format=maxed
  server-id=1
  server mysqld restart

  GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO repl@'192.168.1.%'>  FLUSH PRIVILEGES;
  show master status;
  从服务器上面的配置
  1.配置server-id,此server-id不能和主服务器一样,也不能和其他的从服务器一样
  2.启用relay log,如果次从服务器后面还有从服务器也就是主从复制的多级架构那么把二进制日志也启用起来
  3.使用有复制权限的用户帐号连接到主服务器上面
  relay-log=relay-bin
  relay-log-index=relay-bin.index
  replicate-ignore-db =mysql 设置忽略复制系统数据库
  server-id=2
  server mysqld restart
  SHOW VARIABLES LIKE 'relay%' 查看一下relay相关的信息
  CHANGE MASTER TO MASTER_HOST='192.168.1.1',MASTER_USER='repl',MASTER_PASSWORD='passwd';
  SET GLOBAL read_only=ON; 设置从服务器为只读的
  START SLAVE; 启动复制进程
  SHOW SLAVE STATUS\G; 查看从服务器状态
  如下所示,这说明已经连接上了主服务器,并且复制操作的两个进程都已经起来了
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  验证:
  在主服务器上面创建一个数据库
  CREATE DATABASE mydb;
  在从服务器上面SHOW DATABASES;可以看到在主服务器上面刚刚创建的数据库mydb,表示成功了!
  复制时候忽略某些数据库或者表的操作最好不要在主服务器上面进行,因为主服务器忽略之后就不会再往二进制文件中写了,但是在从服务器上面虽然忽略了某些数据库但是主服务器上面的这些操作信息依然会被复制到从服务器上面的relay log里面,只是不会在从服务器上面执行而已
  不管是黑名单还是白名单只写一个就行了,如果同时使用那么只有白名单生效
  binlog-do-db=  //这里是白名单,写上要复制的数据库
  replication-do-db=mydb1
  replication-do-db=mydb2
  replication-do-table=
  binlog-ignore-db= //这里是黑名单,写上不复制的数据库
  replication-ignore-db=
  replication-ignore-table=


运维网声明 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-606997-1-1.html 上篇帖子: centos apache+php+mysql安装 rpm版 下篇帖子: php5.6安装PDO_MYSQL扩展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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