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

[经验分享] mysql 主从同步实验细解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-9-7 10:43:31 | 显示全部楼层 |阅读模式
一.实验环境


实验环境 192.168.9.108 为master
              192.168.9.109 为slave
数据库版本:version              5.1.73
安装方式:采用的yum 安装 源为163的源
系统版本:centos 6.5
1.查看系统版本
[iyunv@xuegod100 ~]# cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m



二.实验准备
1.安装mysql服务
[iyunv@xuegod100 opt]# ansible -i hosts tomcatserver -m yum -a "name=mysql-server  state=present"
注意:这里我之前装过ansible ,这里统一安装的。
     name这里需要写mysql-server  
2.启动mysql 服务
[iyunv@xuegod100 opt]# ansible -i hosts tomcatserver -m service  -a 'name=mysqld state=started'
3.为MySQL数据库创建密码
mysql> set password for root@localhost = password('123456');
4.配置主数据库,创建需要同步的数据库
[iyunv@xuegod100 opt]# mysql -uroot -p123456
mysql> create database HA;
mysql> use HA;
mysql> create table T1(id int,name varchar(20));



三.配置主服务器
1.配置my.cnf文件
vim /etc/my.cnf
[iyunv@xuegod100 ~]# cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql  #数据的存放点
socket=/var/lib/mysql/mysql.sock
user=mysql #用户
log-bin=mysql-bin-master # 启动二进制日志
server-id =1 #本机数据库ID标识
binlog-do-db=HA  #可以被从服务器复制的库。二进制需要同步的数据库名称。
binlog-ignore-db=mysql #不可以被从服务器复制的库
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld-bin-master.log
pid-file=/var/run/mysqld/mysqld-bin-master.pid
2.重启数据库
修改完数据库要重启
service mysqld restart
3.授权从用户可以登陆
mysql> grant replication slave on *.* to slave@192.168.1.64 identified by "123456";
4.查看状态信息
mysql> show master status;
+-------------------------+----------+--------------+------------------+
| File                    | Position | Binlog_Do_DB               | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-bin-master.000001 |      106 | HA                  | mysql            |
+-------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
查看二进制日志(这个是在配置文件里面配置过的)
[iyunv@xuegod100 ~]# ls /var/lib/mysql/
HA  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql-bin-master.000001  mysql-bin-master.index  mysql.sock  test
mysql> show binlog events \G
*************************** 1. row ***************************
   Log_name: mysql-bin-master.000001
        Pos: 4
Event_type: Format_desc
  Server_id: 1
End_log_pos: 106
       Info: Server ver: 5.1.73-log, Binlog ver: 4
1 row in set (0.00 sec)
5.到处数据库到从的服务器上保证同步的数据库一致
[iyunv@xuegod100 ~]# mysqldump -uroot -p123456 HA > HA.sql
[iyunv@xuegod100 ~]# scp HA.sql  root@192.168.9.109:/root/
HA.sql



四.配置从服务器
1.测试链接到主服务器是否成功
[iyunv@xuegod101 ~]# mysql -uslave -p123456 -h 192.168.9.108
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.1.73-log Source distribution
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.00 sec)
这里看不到HA 的数据库,只有复制权限
2.导入数据库,和主数据库服务器保持一致
mysql> create database HA;
mysql> mysql -uroot -p123456 HA<HA.sql
3.修改从服务器的配置文件
[iyunv@xuegod101 ~]# cat /etc/my.cnf
[mysqld]
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
server-id=2#从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实
master-host=192.168.9.108 #指定主服务器IP 地址
master-user=slave #指定住服务器上可以进行同步的用户名称
master-password=123456 # 指定密码
master-port=3306
master-connect-retry=60 #断点重新链接时间
[mysqld_safe]
log-error=/var/log/mysqld-slave.log
pid-file=/var/run/mysqld/mysqld-slave.pid
4.重启数据库
service mysqld restart
注意:这里要重启 如果直接启动从服务会报错如下
mysql> start slave;
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
解决方案:
mysql> slave stop;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)
mysql> change master to master_host='192.168.1.63',master_user='slave',master_password='123456';
mysql> start slave; 启动从
mysql> show slave status\G  查看状态
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.9.108
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin-master.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: mysqld-slave-relay-bin.000002
                Relay_Log_Pos: 258
        Relay_Master_Log_File: mysql-bin-master.000001
             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: 106
              Relay_Log_Space: 420
              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)
Slave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mysql进程



五.主服务器上查看状态
mysql> show processlist \G
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    10
Current database: HA
*************************** 1. row ***************************
     Id: 6
   User: root
   Host: localhost
     db: NULL
Command: Sleep
   Time: 1480
  State:
   Info: NULL
*************************** 2. row ***************************
     Id: 9
   User: slave
   Host: 192.168.9.109:33320
     db: NULL
Command: Binlog Dump
   Time: 51
  State: Has sent all binlog to slave; waiting for binlog to be updated
   Info: NULL
*************************** 3. row ***************************
     Id: 10
   User: root
   Host: localhost
     db: HA
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
1.主数据库插入数据进行测试
mysql> insert into T1 values(1,'天河');
2.从数据库进行查看
mysql> select * from HA.T1;
+------+--------+
| id   | name   |
+------+--------+
|    1 | 天河    |
+------+--------+
1 row in set (0.00 sec



六.排错
如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。
mysql> show master status;
+-------------------------+----------+--------------+------------------+
| File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------------+----------+--------------+------------------+
| mysql-bin-master.000001 |      200 | HA           | mysql            |
+-------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
从服务器执行MySQL命令下:
mysql> slave stop;             #先停止slave服务
mysql> change master to master_log_file='mysqllog.000004' ,master_log_pos=106;
#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
mysql>slave start;                      #启动从服务器同步服务
mysql> show slave status\G;          #用show slave status\G;看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果都是yes,那代表已经在同步
重启从服务器,再查看状态:
停止从服务器slave stop;
开启从服务器slave start;
排错思路:
1、二进制日志没有开启
2、IPTABLES 没有放开端口
3、对应的主机 IP地址写错了
SQL线程出错
1、主从服务器数据库结构不统一
出错后,数据少,可以手动解决创建插入,再更新slave状态。
注:如果主上误删除了。那么从上也就误删除了。  #因此主上要定期做mysqldump备份。



七.完成
          主从同步到这里就完成了  这里可以采用脚本来进行监控,监控 slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
[iyunv@xuegod101 ~]# cat mysql_master.sh
#!/bin/bash
port=`netstat -anl|grep 3306 |sed -n '1p' |awk '{print $4}'|awk -F: '{ print $2}'`
array=($(mysql -uroot -p123456 -e "show slave status\G"|grep "Running" |awk '{print $2}'))
if [ "$port" == "3306" ]
then
  if [ "${array[0]}" == "Yes" ] || [ "${array[1]}" == "Yes" ]
    then
      echo "slave is OK"
    else
      echo "slave is error"
  fi
fi







运维网声明 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-404094-1-1.html 上篇帖子: MySQL--数据完整性 下篇帖子: 关于mysql登录出现报错信息:ERROR 1045 (28000)的解决方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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