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

[经验分享] linux下数据库双向同步之mysql-Smile

[复制链接]

尚未签到

发表于 2018-9-28 06:23:16 | 显示全部楼层 |阅读模式
  环境:lamp 下搭建一个博客   然后实现同步
  这里:以wordpress为例,进行实施
  具体操作如下:
  一、环境配置
  1.自动获取ip地址,虚拟机设置为桥接
DSC0000.png

  2.[root@gjpslave ~]# yum install wget
  #换成163的yum源:
  cd /etc/yum.repos.d
  mv CentOS-Base.repo CentOS-Base.repo.save
  wget mirrors.163.com/.help/CentOS5-Base-163.repo
  #wget mirrors.163.com/.help/CentOS6-Base-163.repo
  sed -i 's/enabled=1/enabled=0/g' /etc/yum/pluginconf.d/fastestmirror.conf
  cat /dev/null > /var/cache/yum/timedhosts.txt
  yum clean all
  yum makecache
  3.yum -y install gcc* gcc-c++ rpm-build mysql* httpd* php* ppp openldap-devel lrzsz pam-devel wget net-snmp* ntp openssl* libgssapi* iptraf libtool-ltdl* libtool crontabs libpcap* flex byacc libpcap ncurses ncurses-devel automake autoconf libtool make traceroute wget scp openssh* setuptool mlocate pam.i686 openssl.i686 libgcrypt.i686 openssl098e.i686 glibc.i686 fping nload iftop iperf chkconfig unrar --skip-broken
  yum -y update
  4.系统安全
  到dnspod.cn上为新的服务器指定域名
  hostname xx 命名主机名
  #### security ###
  arp -a|grep $(/sbin/route -n|awk '$1=="0.0.0.0"{print $2}')|awk '{print $2 " " $4}'|sed 's#(##g'|sed 's#)##g' > /etc/ethers && arp -f
  echo "SELINUX=disabled" > /etc/sysconfig/selinux
  echo "SELINUXTYPE=targeted" >> /etc/sysconfig/selinux
  setenforce 0
  echo "HISTSIZE=5" >> /root/.bash_profile
  chkconfig --level 2345 hplip off
  chkconfig --level 2345 rpcidmapd off
  chkconfig --level 2345 cups off
  chkconfig --level 2345 portmap off
  chkconfig --level 2345 yum-updatesd off
  chkconfig --level 2345 iptables off
  chkconfig --level 2345 sendmail off
  killall cupsd portmap rpc.statd
  service iptables stop
  service yum-updatesd stop
  service sendmail stop
  echo "Port 2121" >> /etc/ssh/sshd_config
  echo "ClientAliveInterval 9999" >> /etc/ssh/sshd_config
  service sshd restart
  二、博客搭建 wordpress
  wget    http://cn.wordpress.org/wordpress-3.9-zh_CN.tar.gz
  tar zxvf  http://cn.wordpress.org/wordpress-3.9-zh_CN.tar.gz
  [root@gjpmaster tmp]# ls
  hsperfdata_root  wordpress  wordpress-3.9-zh_CN.tar.gz  yum.log  yum_save_tx-2013-08
  [root@gjpmaster tmp]# cp -a wordpress/*  /var/www/html/
  [root@gjpmaster ~]# useradd -d /var/www/html/  -s /sbin/nologin  gjpmaster
  useradd: warning: the home directory already exists.
  Not copying any file from skel directory into it.
  [root@gjpmaster ~]# passwd  gjpmaster
  Changing password for user gjpmaster.
  New password:   123456
  BAD PASSWORD: it is too simplistic/systematic
  BAD PASSWORD: is too simple
  Retype new password:
  passwd: all authentication tokens updated successfully.
  mysql> create  database gjpmaster;
  Query OK, 1 row affected (0.04 sec)

  mysql> grant all on gjpmaster.* to gjpmaster@localhost>  Query OK, 0 rows affected (0.00 sec)
  [root@gjpmaster ~]# mysql -u gjpmaster -p
  Enter password:
  Welcome to the MySQL monitor.  Commands end with ; or \g.

  Your MySQL connection>  Server version: 5.1.73 Source distribution
  Copyright (c) 2000, 2013, 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> quit
  Bye
  [root@gjpmaster html]# cp -a wp-config-sample.php   wp-config.php
  [root@gjpmaster html]# vi  wp-config.php
DSC0001.png

  [root@gjpmaster html]# chmod  777 -R  wp-content/
  [root@gjpmaster html]# vim /etc/httpd/conf/httpd.conf
  
  Options -Indexes
  RewriteEngine on
  RewriteBase /
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
  
  [root@gjpmaster html]# service httpd restart
  Stopping httpd:                                            [  OK  ]
  Starting httpd: httpd: apr_sockaddr_info_get() failed for gjpmaster

  httpd: Could not>  [  OK  ]
DSC0002.png

DSC0003.png

DSC0004.png

DSC0005.png

  前台无法进入:
  [root@gjpmaster html]# vim wp-includes/template-loader.php
DSC0006.png

  三、ftp用来给博客上传下载东西
  #安装
  yum -y install vsftpd
  #修改配置文件
  vi /etc/vsftpd/vsftpd.conf
  #system
  local_umask=022
  pasv_enable=YES
  connect_from_port_20=YES
  local_enable=YES
  write_enable=YES
  use_localtime=YES
  listen=YES
  listen_port=21
  #security
  guest_enable=NO
  pam_service_name=vsftpd
  tcp_wrappers=YES
  userlist_enable=YES
  userlist_deny=NO
  userlist_file=/etc/vsftpd/user_list
  chroot_local_user=YES
  #chroot_list_enable=YES
  #chroot_list_file=/etc/vsftpd.chroot_list
  #log
  xferlog_enable=YES
  xferlog_std_format=YES
  xferlog_file=/var/log/vsftpd.log
  #anonymous
  anonymous_enable=NO
  #max_per_ip=13
  #max_clients=50
  #anon_world_readable_only=YES
  #anon_other_write_enable=NO
  #anon_mkdir_write_enable=NO
  #anon_upload_enable=NO
  no_anon_password=YES
  #anon_max_rate=200000
  #启动ftp
  service vsftpd restart
  #允许匿名登陆
  修改配置文件 要有以下两条
  no_anon_password=YES
  anonymous_enable=YES
  增加anonymous至/etc/vsftpd/user_list
  #增加用户
  两种情况 一种是有指定的目录分给指定的用户 如 将/var/ftp分给用户 wow 二是直接建立用户 目录就是/home/用户名
  1.以将/var/ftp分配给wow为例
  useradd -s /sbin/nologin -d /var/ftp wow      // /sbin/nologin 是安全配置 意思是这个用户无法使用ssh登陆仅能使用ftp登陆 -d后面跟的是指定给此用户的目录
  passwd wow //修改wow的用户名
  echo wow >> /etc/vsftpd/user_list  这里一定要用>> 否则会清空里面的原来存放的用户名 只有这个列表user_list内的用户名可以登陆ftp上传文件 所以每添加一个用户名都要写入此文件
  2.建立一个test用户 可以自己上传或下载文件
  usreadd -s /sbin/nologin test
  passwd test
  echo test >> /etc/vsftpd/user_list
  3.如果服务器上有多个ftp 在使用ftp协议下载时只能有一个采用匿名的方式  其它的都要带账号密码 比如说 ftp://123:123@sh02.lonlife.net/hehe.zip 还有另外一种方式就是给用户配置一个单独的域名用于下载 这时需要修改 /etc/httpd/conf/httpd.conf 增加如下 并重启http服务就好了
  
  Options -Indexes
  DocumentRoot "/old/home/bf2comcn"   //ftp的目录
  ServerName ftp.bf2.com.cn   绑定的域名
  ErrorLog /var/log/httpd/bf2comcn_err.log
  CustomLog /var/log/httpd/bf2comcn.log combined
  
  上面是例子,操作如下:
  从设备:
  [root@gjpslave html]# yum  install vsftpd  -y
  [root@gjpslave vsftpd]# ls
  ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
  [root@gjpslave vsftpd]# mv vsftpd.conf  vsftpd.conf.bak
  [root@gjpslave vsftpd]# vim vsftpd.conf
  -bash: vim: command not found
  [root@gjpslave vsftpd]# vi vsftpd.conf
  [root@gjpslave vsftpd]# service vsftpd restart
  Shutting down vsftpd:                                      [  OK  ]
  Starting vsftpd for vsftpd:                                [  OK  ]
  [root@gjpslave vsftpd]# vi vsftpd.conf
  [root@gjpslave vsftpd]# vi /etc/vsftpd/user_list
  [root@gjpslave vsftpd]# useradd -s /sbin/nologin  -d /var/www/html/ gjpslave
  useradd: warning: the home directory already exists.
  Not copying any file from skel directory into it.
  [root@gjpslave vsftpd]# passwd gjpslave
  Changing password for user gjpslave.
  New password: 123456
  [root@gjpslave vsftpd]# echo gjpslave >>/etc/vsftpd/user_list
  [root@gjpslave vsftpd]# chmod 755 -R  /var/www/html/
  [root@gjpslave vsftpd]# chown gjpslave:gjpslave  -R /var/www/html
  后面将gjpslave还是改为gjpmaster了
DSC0007.png

  四、数据库同步(单向)
  从主站导入数据库
  [root@gjpmaster www]# /usr/bin/mysqldump -u root -p gjpmaster>/tmp/20140528.sql;
  从站从主站下载:
  [root@gjpslave vsftpd]# scp -rP 22 10.0.7.112:/tmp/20140528.sql  /tmp/20140528.sql
  root@10.0.7.112's password:
  20140528.sql                                                                           100%  408KB 407.6KB/s   00:00
  mysql> create database gjpmaster;
  Query OK, 1 row affected (0.03 sec)
  mysql> use gjpmaster;
  Database changed
  mysql> source /tmp/20140528.sql;
  Query OK, 18 rows affected (0.00 sec)
  Records: 18  Duplicates: 0  Warnings: 0
DSC0008.png

  同步好的数据

  grant all on gjpmaster.* to gjpslave@localhost>  由于上面账号设置成gjpslave 出错了,改为gjpmaster 和主站的一样,ok
DSC0009.png

  开始同步数据库:

  grant replication slave on *.* to "gjpmaster"@"10.0.7.113">  [root@gjpmaster tmp]# vim /etc/my.cnf
  [mysqld]
  server-id=1
  log-bin=mysql-bin
  binlog-do-db=gjpmaster
  binlog-ignore-db=mysql
  [root@gjpmaster tmp]# service mysqld restart
  Stopping mysqld:                                           [  OK  ]
  Starting mysqld:                                           [  OK  ]
  [root@gjpmaster tmp]# mysql -u root -p
  mysql> show variables like 'server_id';
  +---------------+-------+
  | Variable_name | Value |
  +---------------+-------+
  | server_id     | 1     |
  +---------------+-------+
  1 row in set (0.00 sec)
  mysql> show master status;
  +------------------+----------+--------------+------------------+
  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+--------------+------------------+
  | mysql-bin.000001 |      106 | gjpmaster    | mysql            |
  +------------------+----------+--------------+------------------+
  1 row in set (0.00 sec)
  四、配置MySQL从服务器(192.168.21.129)的my.cnf文件
  vi /etc/my.cnf   #编辑配置文件,在[mysqld]部分添加下面内容
  server-id=2   #设置服务器id,修改其值为2,表示为从数据库
  log-bin=mysql-bin  #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
  replicate-do-db=iyunvdb   #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
  replicate-ignore-db=mysql   #不同步mysql系统数据库
  read_only  #设置数据库只读
  :wq!    #保存退出
  service mysqld restart   #重启MySQL
  mysql  -u root -p  #进入MySQL控制台
  show variables like 'server_id';  #查看server-id的值,必须为上面设置的2,否则请返回修改配置文件
  mysql> show variables like 'server_id';
  +---------------+-------+
  | Variable_name | Value |
  +---------------+-------+
  | server_id     | 2     |
  +---------------+-------+
  1 row in set (0.01 sec)
  mysql> slave stop;
  Query OK, 0 rows affected, 1 warning (0.00 sec)
  mysql> change master to  master_host='10.0.7.112',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000001',master_log_pos=106;
  Query OK, 0 rows affected (0.05 sec)
  change master to  master_host='10.0.7.112',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=316;
  mysql> slave start;
  Query OK, 0 rows affected (0.01 sec)
  mysql> SHOW SLAVE  STATUS\G
  mysql> SHOW SLAVE  STATUS\G
  *************************** 1. row ***************************
  Slave_IO_State: Waiting for master to send event
  Master_Host: 10.0.7.112
  Master_User: gjpmaster
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000001
  Read_Master_Log_Pos: 106

  >
  >
  >  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  Replicate_Do_DB: gjpmaster
  Replicate_Ignore_DB: mysql
  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: 106

  >  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:
  1 row in set (0.00 sec)
  测试:
  主设备创建个表test

  mysql> CREATE TABLE test (>  Query OK, 0 rows affected (0.07 sec)

  CREATE TABLE lzw(>  从设备
DSC00010.png

  发表文章也是如此
  wordpress迁移到其他服务器上 IP变动时候要修改以下信息.数据库里修改.
  wp_options表:
  siteurl 要改成新的IPurl
  wp_posts表:
  update wp_posts set post_content=replace(post_content,'192.168.100.151','10.0.0.23')
  update wp_posts set guid=replace(guid,'192.168.100.151','10.0.0.23')
  这里具体操作如下:
  update wp_posts set post_content=replace(post_content,'10.0.7.112','10.0.7.113')
  update wp_posts set guid=replace(guid,'10.0.7.112','10.0.7.113')
  第一个域名是老域名  第二个是新的
  UPDATE wp_options SET option_value=replace(option_value,'http://10.0.7.113', 'http://10.0.7.112') WHERE option_name='home' OR option_name='siteurl';
  在这里,可安装phpmyadmin 对数据库进行管理
DSC00011.png

DSC00012.png

  五、数据库的双向同步:
  双向参考: http://www.linuxidc.com/Linux/2012-10/71593.htm
  主站:
  useradd  backup   passwd backup  123

  mysql> grant file on *.* to backup@'10.0.7.113'>  Query OK, 0 rows affected (0.00 sec)
  mysql>flush privileges;
  在slave上测试账户backup是否可以访问mster上的mysql:
  #mysql -u backup -p -h 10.0.7.112(输入密码123,可以访问说明设置正确)
  slave上也要建立账号 设密码

  mysql> grant replication slave on *.* to "backup"@"10.0.7.113">  [root@gjpmaster ~]# cat /etc/my.cnf
  [mysqld]
  server-id=1
  log-bin=mysql-bin
  binlog-do-db=gjpmaster
  binlog-ignore-db=mysql
  max-binlog-size=104857600
  master-host=10.0.7.113
  master-user=backup
  master-password=123
  master-port=3306
  replicate-do-db=gjpmaster
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  user=mysql
  # Disabling symbolic-links is recommended to prevent assorted security risks
  symbolic-links=0
  [mysqld_safe]
  log-error=/var/log/mysqld.log
  pid-file=/var/run/mysqld/mysqld.pid
  [root@gjpmaster tmp]# service mysqld restart
  mysql> slave stop;
  mysql> change master to  master_host='10.0.7.113',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=478;
  change master to  master_host='10.0.0.139',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=11395;
  mysql> slave start;
  mysql> show slave status\G;
  *************************** 1. row ***************************
  Slave_IO_State: Waiting for master to send event
  Master_Host: 10.0.7.113
  Master_User: gjpmaster
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000002
  Read_Master_Log_Pos: 478

  >
  >
  >  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  从站:

  mysql> grant replication slave on *.* to "gjpmaster"@"10.0.7.112">  [root@gjpslave html]# cat /etc/my.cnf
  [mysqld]
  server-id=2
  log-bin=mysql-bin
  binlog-do-db=gjpmaster
  master-host=10.0.7.112
  master-user=backup
  master-password=123
  master-port=3306
  replicate-do-db=gjpmaster
  #master-connect-retry=60
  datadir=/var/lib/mysql
  socket=/var/lib/mysql/mysql.sock
  user=mysql
  # Disabling symbolic-links is recommended to prevent assorted security risks
  symbolic-links=0
  [mysqld_safe]
  log-error=/var/log/mysqld.log
  pid-file=/var/run/mysqld/mysqld.pid
  service mysqld restart
  mysql> slave stop;
  mysql>  change master to  master_host='10.0.7.112',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000002',master_log_pos=316;
  change master to  master_host='10.0.0.139',master_user='gjpmaster', master_password='gjpmaster321',master_log_file='mysql-bin.000001',master_log_pos=106;
  mysql> slave start;
  mysql> SHOW SLAVE  STATUS\G
  *************************** 1. row ***************************
  Slave_IO_State: Waiting for master to send event
  Master_Host: 10.0.7.112
  Master_User: gjpmaster
  Master_Port: 3306
  Connect_Retry: 60
  Master_Log_File: mysql-bin.000002
  Read_Master_Log_Pos: 628

  >
  >
  >  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  Replicate_Do_DB: gjpmaster
  use gjpmaster;
  update wp_posts set post_content=replace(post_content,'10.0.7.112','10.0.7.113');
  update wp_posts set guid=replace(guid,'10.0.7.112','10.0.7.113');
  第一个域名是老域名  第二个是新的
  UPDATE wp_options SET option_value=replace(option_value,'http://10.0.7.112', 'http://10.0.7.113') WHERE option_name='home' OR option_name='siteurl';
  最后同步成功


运维网声明 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-602956-1-1.html 上篇帖子: MySQL 优化(一) 下篇帖子: 10分钟完成MySQL对emoji的支持
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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