灯液未泱-mysql主从部署(二)

来源:互联网 发布:淘宝网棉背心 编辑:程序博客网 时间:2024/06/05 02:43

任时光匆匆溜走,我只在乎你。


—我只在乎你


这篇文章讲mysql的主从配置和主从规划


mysql主从的作用主要有以下几点:

(1) 数据分布(Data distribution)

(2) 负载平衡(Load balancing)

(3) 备份(Backup)

(4) 高可用性(High availability)

(5) 容错(Fault-tolerant)


数据库的同步方案主要有

(1)自身同步机制:mysql replication,mysql主从复制(逻辑的SQL从写)

(2)第三方的drbd。可以参考此链接 http://oldboy.blog.51cto.com/2561410/1240412


MySQL主从复制和读写分离的意思

①MySQL支持单向、双向、链式级联、实时、异步复制。在复制过程中一台机器作为主服务器(Master),另一个或多个其他的服务器充当从服务器(Slave)。
②主从复制可以是单向的:M===》S,也可以是M《===》S,也可以是M环状同步等。如果设置了链式级联复制,那么从(Slave)服务器本身,除了充当从服务器之外,也同时充当其下面的从(Slave)服务器的主服务器。
#链式复制:A===》B===》C====》D.其他数据同步方式:主从同步,主主同步,一主多从,线性级联主主同步(数据容易不一致),环状级联多主同步。
环状级联多单向主多从同步(新浪):


个人觉得下面这张图还是很形象的

wKioL1Sjo7PA3GS_AAESGhO9I70874.jpg


当配置好的主从复制之后,所有的数据酷内容的更新必须在主服务器上进行,避免用户对服务器上数据库内容的更新与对从服务器上数据内容的更新不一致,导致冲突。


为了防止数据从从库写入,可以采用以下方法:

(1)采用忽略授权表的方式的同步,然后对从(Slave)服务器上的用户仅仅授权select读权限,不同步mysql库,这样保证主库和从库相同的用户可以授权不同的权限。
(2)在从(Slave)服务器上的启动选项中增加参数或者在数据库的配置文件中增加read-only参数来确保从库只读。当然忽略授权表授权用户和read-only参数同时设置的操作能更好的确保从(Slave)服务器的只读(生产常用)。
#read-ony参数可以让从(Slave)服务器只允许来自slave服务器线程或具有SUPER权限的用户更新,可以确保salve服务器不接受来自普通用户的更新。slave服务器启动选项增加==read-only参数也是同样的功能。(注意数据库用户的grant授权)



根据服务器拆分业务独立并分担压力:
#可以把前三个从(Slave)通过LVS提供对外服务。后面两个(Slave)作为后台使用,一个做日常后台分析使用,一个只做备份。
#通过拆分业务,提升访问速度和效率(侧重对外服务)。

wKiom1SjosegtrUjAAGVpauUEt8155.jpg


MySQL主从同步的原理

Replication机制:Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 从库端,另外一个线程(IO线程)在 Master 主库端。

  要实现 MySQL 的主从复制,首先必须打开 Master 端的BinLog(mysql-bin.xxxxx文件)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全按照顺序的执行日志中所记录的各种操作。打开MySQL的BinLog可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在 my.cnf 配置文件中的 mysqld 参数组[mysqld]标识后的参数部分)增加 “log-bin” 参数项。
MySQL 复制的基本过程如下:


   1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置点(或者从最开始的日志)之后的日志(binlog)内容;
   2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求,验证合法之后,进行读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Bin Log 文件的名称以及在 Binary Log 中的位置点之后所有的binlog信息内容。(IO线程就是负载复制信息,放入Relay-log文件中,新的位置点信息和binlog文件名称信息是由主库IO,返回给从从库的IO,然后从库的IO,再写入到masterinfo文件中的。)
   3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件【中继日志】中,然后Salve从库段就会发现这个Relay Log中的内容更新,并根据日志记录内容解析成曾在Master执行的SQL语句,进行本地复制,复制完成之后,清理应用过的日志内容。在Slave端的IO线程完成一次数据的请求得到之后,Slave服务端的master info文件执行记录(CHANGE MASTER 信息内容)并将读取到的Master端给与内容的bin-log的文件名和位置记录等信息到master- info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”,下次读取的时候,IO线程再次把请求得到的日志内容记录记录到Relay Log文件中,然后继续进行轮回复制操作。
##master- info记录的最重要的信息就是位置点。这个位置点和IO请求的位置点是一致的。
   4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。SQL线程的工作过程中也会讲读取的binlog文件名和位置信息记录到relay-info文件中。
###注释:当主库有内容更新的时候,会把更新的结果记录到binlog日志中,主从同步是由从库找主库的。从库必须从库的主机上必须配置以下内容,然后打开start salve的开关,开始同步。

cat | mysql -uroot -p123456 -S /etc/my.cnf<<EOFCHANGE MASTER TOMASTER_HOST='主库的IP地址'MASTER_PORT=3306MASTER_USER='主库登陆用户名'MASTER_PASSWORD='主库登陆密码'MASTER_LOG_FILE='主库logbin文件名'MASTER_LOG_POS=333;EOF




在这里借用一下王志宏的图

wKiom1Sjox2gGe_CAARXe5osSwg147.jpg



主从同步之前准备工作:
a、需要先把binlog位置点以前的内容,全部注入入到从库,(位置点在从库配置信息中确定)。
b、主库备份的位置点,就是从库CHANG MASTER 中指定的位置点。(这个位置点就是我们前面在主库备份的时候制定参数--master-data=1时候记录进入binlog的位置点信息)。
c、备份数据库的时候--master-data=1的作用:做从库的时候恢复数据的时候不用再找和指定位置点信息。
d、在开启从库开关start slave开关之前,从库是有完整数据的,并切合主库在位置点之前保持一致的。
e、在开启从库开关之前,需要在主库建立专门用于主从同步的用户。
f、主库在主从同步之前要打开binlog开关,否则无法实现同步。
g、从库打开start slave开关的过程,实际上就是让从库IO线程和SQL线程开始工作的过程。
h、如果上述主从同步配置完成,在从库后面还要在配置一台从库的话一定要在现在的从库上开启binlog,然后加入条内容:

1)原来的logbin打开

2)加入log_slave_updates即可


数据库MySQL主从同步实践
①一般常规做主从同步,主从库服务器多数在不同的机器上面,并且监听的端口均默认为3306.
②在掌握单数据库多实例的同步配置之后,完成异机相同端口之间的主从同步配置部署。
③主库一般称为master,从库一般称之为slave。
④实际生产环境中,应该尽最大努力给开发人员读写库的帐号密码端口都一样。
⑤注意在主库备份数据库内容的时候如果使用了--master-data=1,那么上面的CHANGE MASTER TO内容中就可以不需要指定 MASTER_LOG_FILE和MASTER_LOG_POS的参数值了。因为位置点已经获取。所以在实际工作中只要加上这个参数,再加上那个锁表的参数,那么在任何时间点,都可作从库,因为有全备,也有位置点。(前提是主库的binlog完整存在)
⑥在部署的时候注意多开操作窗口进行配置。


#################################主库,MySQL-01操作步骤Last login: Mon Dec 29 13:44:41 2014 from 192.168.109.1Where we love is home, home that our feet may leave, but not our hearts.[tslove@MySQL-01 ~]$ sudo su -[root@MySQL-01 ~]# /usr/local/mysql/bin/mysql startStarting MySQL...[root@MySQL-01 ~]# netstat -lntup|grep 330                       ##=====》解析:查看mysql是否正常启动tcp        0      0 0.0.0.0:3306                0.0.0.0:*                    LISTEN      1797/mysqld##注意主库服务器的配置文件中首先打开【mysqld】模块下的log-bin,然后确保主从的server-id 不一样(无论是否同一台机器,可以考虑使用IP地址的最后8位)。[root@MySQL-01 ~]# vi /etc/my.cnf       [root@MySQL-01 ~]# egrep "log-bin|server-id" /etc/my.cnf   ##=====》解析:确认查看配置文件的修改log-bin = mysql-binserver-id = 1[root@MySQL-01 ~]# ll /usr/local/mysql/data/                                ##=====》解析:文件查看,是否生成mysql-bin.index文件以及bin-log日志。                         总用量 48drwxr-xr-x 5 mysql mysql  4096 12月 31 01:58 data-rw-r--r-- 1 mysql mysql  1899 12月 31 02:08 my.cnf-rwx------ 1 root  root   1307 12月 23 11:48 mysql-rw-rw---- 1 mysql mysql   890 12月 27 15:57 mysql-bin.000007-rw-rw---- 1 mysql mysql   107 12月 31 01:58 mysql-bin.000008-rw-rw---- 1 mysql mysql    56 12月 31 01:58 mysql-bin.index-rwxr-xr-x 1 root  root   1307 12月 22 15:09 mysql.bk-rw-rw---- 1 mysql mysql     5 12月 31 01:58 mysqld.pid-rw-r----- 1 mysql root  15084 12月 31 01:58 mysql_oldboy3306.errsrwxrwxrwx 1 mysql mysql     0 12月 31 01:58 mysql.sock[root@MySQL-01 ~]# mysql -uroot -p123456 -e "show variables like 'log_bin'"        ##=====》解析:命令行登陆数据库查看log_bin是否开启+---------------+-------+| Variable_name | Value |+---------------+-------+| log_bin       | ON    |+---------------+-------+[root@MySQL-01 ~]# mysql -uroot -p123456mysql> grant replication slave on *.* to 'rep'@'192.168.60.%' identified by '123456';Query OK, 0 rows affected (0.00 sec)   ##=====》解析:授权专门用户主从同步的用户,也就是从库连接时候的验证帐号  mysql> flush privileges;            ##=====》解析:刷新权限到磁盘Query OK, 0 rows affected (0.00 sec)   mysql> flush table with read lock;  ##=====》解析:锁表,禁止数据的写入,也可以加上-X参数来进行自动锁表,可以查看确认是否成功锁表。Query OK, 0 rows affected (0.00 sec)  mysql> show master status;          ##=====》解析:主要目的就是拿到那个位置点+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000008 |      335 |              |                  |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)mysql> show master logs;            ##=====》解析:查看binlog日志信息+------------------+-----------+| Log_name         | File_size |+------------------+-----------+| mysql-bin.000007 |       890 || mysql-bin.000008 |       335 |+------------------+-----------+2 rows in set (0.00 sec)###单开窗口执行备份命令[root@MySQL-01 ~]# mysqldump -uroot -p123456 -A -B -E | gzip >/mnt/rep.sql.gz    ##=====》解析:执行全库全表备份,注意-E参数。mysql> unlock tables;Query OK, 0 rows affected (0.00 sec)    ##=====》解析:执行全库备份完成之后,解开锁表,让主库继续提供服务##注意此时需要讲主库的已经备份数据,全部灌入到从库中,保持主从同步前的数据一致性。(scp等命令拷贝或者其他方法)mysql> quitBye    #################################从库,MySQL-02操作步骤Last login: Mon Dec 29 13:44:45 2014 from 192.168.109.1Where we love is home, home that our feet may leave, but not our hearts.[root@MySQL-02 ~]# /usr/local/mysql/bin/mysql startStarting MySQL...[root@MySQL-02 ~]# netstat -lntup|grep 330tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1809/mysqld [root@MySQL-02 ~]# vi /etc/my.cnf ##=====》解析:修改配置文件,注意从库的log-bin如果不做级联同步,那么就可以不用开启,但是要保证server-id和主库的不一致。如果开启级联还要加上log_slave_updates参数。     [root@MySQL-02 ~]# egrep "log-bin|server-id" /etc/my.cnf#log-bin = /data/3306/mysql-bin         ##=====》解析:可开,可不开(当要做级联的时候需要开)server-id = 2                           ##=====》解析:保持和主库的ID不一致。[root@MySQL-02 ~]# ll /mnt | grep *.sql.gz        ##=====》解析:从库拿到主库的灌入文件,进行数据的写入。总用量 144-rw-r--r-- 1 root root 144304 12月 31 02:40 rep.sql.gz[root@MySQL-02 ~]# gzip -d /mnt/rep.sql.gz    ##=====》解析:使用gzip -d 解压拿到的文件为sql文件[root@MySQL-02 ~]# ll /mnt/rep.sql -rw-r--r-- 1 root root 528028 12月 31 02:40 /mnt/rep.sql[root@MySQL-02 ~]# mysql -uroot -p123456  </mnt/rep.sql    ##=====》解析:通过备份文件导入从库的数据库##在从库中CHANGE MASTER TO写入配置信息如下:mysql>  CHANGE MASTER TO                  ->  MASTER_HOST='192.168.60.129',    ->  MASTER_PORT=3306,    ->  MASTER_USER='rep',    ->  MASTER_PASSWORD='123456',    ->  MASTER_LOG_FILE='mysql-bin.000008',    ->  MASTER_LOG_POS=335;Query OK, 0 rows affected (0.03 sec)###注意在主库备份数据库内容的时候如果使用了--master-data=1,那么上面的CHANGE MASTER TO内容中就可以不需要指定 MASTER_LOG_FILE和MASTER_LOG_POS的参数值了。因为位置点已经获取。所以在实际工作中只要加上这个参数,再加上那个锁表的参数,那么在任何时间点,都可作从库,因为有全备,也有位置点。mysql> system cat /usr/local/mysql/data/master.info    ##=====》解析:在mysql内查看master.info文件信息18mysql-bin.000008335192.168.60.129rep1234563306#内容略mysql> start slave;                 ##=====》解析:开启主从同步的开关,start slave进行主从同步。Query OK, 0 rows affected (0.00 sec)mysql> show slave status\G         ##=====》解析:查看进行状态,slave的正常工作状态信息*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.60.129                  Master_User: rep                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000008          Read_Master_Log_Pos: 335               Relay_Log_File: relay-bin.000003                Relay_Log_Pos: 253        Relay_Master_Log_File: mysql-bin.000008             Slave_IO_Running: Yes            Slave_SQL_Running: Yes              Replicate_Do_DB:           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: 335              Relay_Log_Space: 403              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: 0Master_SSL_Verify_Server_Cert: No                Last_IO_Errno: 0                Last_IO_Error:                Last_SQL_Errno: 0               Last_SQL_Error:   Replicate_Ignore_Server_Ids:              Master_Server_Id: 11 row in set (0.00 sec)  ###进行数据的写入验证======》在主库上上进行数据的写入更新然后在从库上进行查看###主库操作:[root@MySQL-01 ~]# mysql -uroot -p123456 -e "create database tslove_test;"[root@MySQL-01 ~]# mysql -uroot -p123456 -e "show databases;"+--------------------+| Database           |+--------------------+| information_schema || d3306              || mysql              || performance_schema || tslove_test        |+--------------------+###从库验证[root@MySQL-02 ~]# mysql -uroot -p123456 -e "show databases;"+--------------------+| Database           |+--------------------+| information_schema || d3306              || mysql              || performance_schema || tslove_test        |+--------------------+#在从库的relay-log中进行查看[root@MySQL-02 ~]# mysqlbinlog /usr/local/mysql/data/relay-bin.000003|grep "create"          create database tslove_test#由以上命令的输出显示,可以确认主从同步,工作正常。[root@MySQL-02 ~]# cat  /usr/local/mysql/data/relay-log.info      /usr/local/mysql/data/relay-bin.000003350                   ##=====》解析:注意这两个位置点信息     mysql-bin.000008432[root@MySQL-02 ~]# cat /usr/local/mysql/data/relay-bin.index /usr/local/mysql/data/relay-bin.000002/usr/local/mysql/data/relay-bin.000003###此时主从同步的简单部署完成。   ###部署过程中的排错:在查看状态的时候,出现状态信息:Slave_IO_Running: Connecting   从库的IO进程一直处理连接状态。Slave_SQL_Running: Yes报错信息:error connecting to master 'rep@192.168.60.129:3306' - retry-time: 60  retries: 86400根据提示,原来是IP地址有错误,解决:1、停止slave,数据库执行命令stop slave;2、修改配置的参数信息,确认正确。重新写入:mysql> CHANGE MASTER TO  MASTER_HOST='192.168.60.129',  MASTER_PORT=3306,  MASTER_USER='rep',  MASTER_PASSWORD='123456',  MASTER_LOG_FILE='mysql-bin.000008',  MASTER_LOG_POS=335;Query OK, 0 rows affected (0.01 sec)3、打开主从同步开关,并查看状态信息mysql> start slave;Query OK, 0 rows affected (0.00 sec)4、重新出现报错:报错信息Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).解决:提示信息说主从库的server-id有冲突进行查看:[root@MySQL-01 ~]# grep "server-id" /etc/my.cnf server-id = 1  #主库为1[root@MySQL-02 ~]# grep "server-id" /etc/my.cnf server-id = 2  #从库为3于是在数据库中进行server-id的查看发现主库和从库的server确实是和报错一致一样。mysql> show variables like 'server_id';    +---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 1     |+---------------+-------+1 row in set (0.00 sec)分析原因,在从库修改完成配置文件的server-id值为3的时候,没有重启从库的数据库,造成配置文件的更新数据库没有引用。6、既然知道问题所在,mysql并没有从my.cnf文件中更新server_id重启数据库进行更新:[root@MySQL-02 ~]# /usr/local/mysql/bin/mysql stopStoping MySQL...[root@MySQL-02 ~]# /usr/local/mysql/bin/mysql startStarting MySQL...[root@MySQL-02 ~]# mysql -uroot -p123456 -e "show variables like 'server_id';"+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 3     |+---------------+-------+mysql> start slave;                    Query OK, 0 rows affected, 1 warning (0.00 sec)  mysql> show slave status\G*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.60.129                  Master_User: rep                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000008          Read_Master_Log_Pos: 335               Relay_Log_File: relay-bin.000003                Relay_Log_Pos: 253        Relay_Master_Log_File: mysql-bin.000008             Slave_IO_Running: Yes            Slave_SQL_Running: Yes        Seconds_Behind_Master: 0#以下略  #经验证,配置成功。#如果是不想重启从库的数据库,那么我们可以在全局变量中修改参数,命令如下:mysql -uroot -p123456 -S -e "set global server_id=2;"#此种修改可以使得没数据库可以不重启数据库而引用我们设置的参数,而且由于已经修改了配置文件,重启之后,也是正确的配置。这里需要注意的是配置文件的server-id要和自己时候动修改的server-id一致。



数据库MySQL主从同步搭建步骤
CentOS下mysql主从同步的配置步骤小结:
#主库通过记录binlog实现对从库的同步,binlog记录更新的语句。
1、准备环境(可以是多实例环境),注意数据库的版本,正常启动。
2、配置my.cnf配置文件,主库的配置文件需要开启log-bin功能并且指定server-id值(注意不能和从库的server-id值相同),从库的log-bin功能可以不开启,做链式同步或者做备份用需要开启,并且额外增加参数加上log_slave_updates。
3、在数据库主库上创建用于主从同步的专用账户,并给予授权replication slave同步的权限。
4、登陆主库,主库锁表,flusah table with read lock;(注意窗口关闭后失效)并确认bin-log的位置。(注意锁表额多种途径以及不需要锁表操作备份参数)。
5、使得主库和从主从同步开启前的数据保持一致(scp或者拷贝)。如果数据量很大,并且允许停机,那么可以考虑停机,数据打包传输(非必须使用mysqldump)。
6、完成主从同步前的数据统一之后,解锁主库,unlock tables;
7、在从库查看binlog位置点信息,添加配置参数(注意相关参数信息的完整、正确无误),然后执行chang master to 。。语句。无误之后,开启同步开关start slave;并检查同步状态show slave status\G
8、主库更新,测试。数据库外面查看确认,登陆数据库查看确认。
#注意事项:
#注意配置文件是log-bin,数据库中的是log_bin,
#change的时候自符合符号之间不能有空格.
#注意配置文件中锁表的超时时间设置参数。
#注意数据库无法启动故障(pid、socket)
#注意由于切换binlog导致show master status位置变化问题。
#注意:5.1版本锁表flush tables with read lock;5.5版本fulsh table with read lock;
#主从同步涉及的相关进程及文件:(mysql通过索引读取信息)

主库Master:IO线程,bin-log日志文件,Master_Log_File,Read_Master_Log_Pos,主库数据。
从库Slave:IO线程,SQL线程,bin-log日志文件,Relay_log文件,Relay_Log_Pos,Master_info,Relay_info,从库数据。



#第一种方案:快速配置主从复制:
①安装配置好从库的数据库,配置好log-bin和sever-id参数。
②无需配置主库my.cnf文件,主库的log-bin(默认一定要开启的)和server-id参数默认就是配置好的。
③登陆主库创建用于主从同步的张华并授权replication slave权限。
④使用mysqldump带--master-data=1备份的全备数据恢复到主库。
⑤从库执行change master to 语句..,无需binlog文件以及对应位置点信息语句。
⑥从库开启start slave;开关,start slave。
⑦从库show slave status\G查看同步状态,调试,主库更新测试。
#可以考虑使用一键自动化配置主从复制脚本。


#第二种方案:主从配置方案参数步骤
①申请设备资源,用来做从库的服务器。注意(CPU和磁盘等)和主库的配置差距不要太大。
②撰写方案文档以及实施步骤获取建议意见。
③如果上线的服务器只有主库,而且已经线上应用,由于业务需要第一次做从库,此时可以申请停机维护时间。
#注意时间的限定:确认这个时间段内可以做一次全备,在用户访问量最小,而且不影响其他业务运转的时间点来停机(包括锁表)来配置主从同步,一般凌晨时间段。
#注意停机(锁表、停库)的最小时间段,为锁表后备份时间,无需等待主从复制配置好。
#注意不申请停机维护的方案,就是多做一些定时任务备份,在定时备份时候,做一些措施(注意--master-data参数)。需要在做主从复制前,告知可能影响周知。


第三种方案:脚本备份进行主从复制备份
①在访问压力最小的时候做定时任务备份:模拟主从同步步骤,获取全备一级级全备过程中binlog位置点信息,或者使用--master参数解决。
②一键主从复制脚本来实现。脚本的主要作用就是拿到备份和binlog日志点的过程。
##脚本中相关参数注意mysql搜索引擎相关参数的不同。


状态信息注意事项
(参考mysql手册)
①show master status; #查看主库状态,show slave status\G查看从库状态。
②show processlist\G #查看进程状态信息。
③主IO状态事件:
Sending binlog event to slave :线程读取到一个事件,并正发送至从服务器。
Finsish reading one binlog;switching to next binlog :线程已经读完二进制日志文件,并且正打开下一个要发送到从库的日志文件。
Master has sent all binlog to slave; waiting for binlog to be updated :县城已经发送所有的binlog,等待数据库binlog更新。
Waiting to finalize termination 线程停止时候发生的一个很简单的状态。
④从IO状态时间
Connecting to master :线程正视图链接主服务器。
Check master version :建立同主服务器链接后立即出现的状态。
Registering slave on master :建立同主服务器链接后立即出现的状态。
Requesting binlog dump :建立同主服务器链接后立即出现的状态,线程向主服务器发送请求,索取(文件名和位置开始的)日志文件
Waiting to reconnect after a failed binlog dump request :如果二进制文件转存储请求失败(由于没有连接),线程进入睡眠状态,然后定期尝试重新链接。可以使用--master-connect-retry参数指定重试间隔
Requesting after binlog dump request :线程重新连接服务器
Waiting for master to send event :线程以连接上主服务器,等待二进制日至事件到达。
Queueing master event to the relay log :线程已经读取到一个实践,正复制到中继日志文件。
Waiting to reconnect after a failed master event read :读取时候(由于没有连接)出现错误,线程企图重新连接时将睡眠master-connect-retry秒数。
Requesting after a failed master event read :线程正重新尝试链接服务器
Waiting for the slave SQL thread to free enough relay log space 正使用一个非零relay_log_space_limit值,终极日至亿增长到期组合代谢哦啊超过该值。IO线程等待SQL线程处理,并释放空间。
Waiting for slave mutex on exit :线程停止时候的一个状态。
##通过查看状态,确认同步状态,执行相关操作。


####master端查看mysql> show master status;+------------------+----------+--------------+------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000009 |      107 |              |                  |+------------------+----------+--------------+------------------+1 row in set (0.00 sec)mysql> show processlist\G*************************** 1. row ***************************     Id: 2   User: root   Host: localhost     db: NULLCommand: Query   Time: 0  State: NULL   Info: show processlist*************************** 2. row ***************************     Id: 3   User: rep   Host: 192.168.109.166:16351     db: NULLCommand: Binlog Dump   Time: 368  State: Master has sent all binlog to slave; waiting for binlog to be updated   Info: NULL2 rows in set (0.00 sec)    #slave端查看mysql> show processlist\G*************************** 1. row ***************************     Id: 3   User: root   Host: localhost     db: NULLCommand: Query   Time: 0  State: NULL   Info: show processlist*************************** 2. row ***************************     Id: 4   User: system user   Host:      db: NULLCommand: Connect   Time: 94  State: Waiting for master to send event               #   Info: NULL*************************** 3. row ***************************     Id: 5   User: system user   Host:      db: NULLCommand: Connect   Time: 94  State: Slave has read all relay log; waiting for the slave I/O thread to update it   Info: NULL3 rows in set (0.00 sec)mysql> show  slave status\G*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: 192.168.109.165                  Master_User: rep                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000009          Read_Master_Log_Pos: 202               Relay_Log_File: relay-bin.000007                Relay_Log_Pos: 348        Relay_Master_Log_File: mysql-bin.000009             Slave_IO_Running: Yes                      ##=========》解析:这两个yes只是说明同步的状态是不是OK,但是不代表完成状态。            Slave_SQL_Running: Yes              Replicate_Do_DB:           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: 202              Relay_Log_Space: 644              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:   Replicate_Ignore_Server_Ids:              Master_Server_Id: 11 row in set (0.00 sec)


0 0