mysql dba系统学习(18)mysql主从复制的实现
mysql主从复制的实现
1、MySQL复制的实现原理 MySQL支持单向、双向复制、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入一个二进制日志文件中,并创建一个索引文件以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,日志文件会通知主服务器,从服务器在日志中读取的最后一次成功更新的位置。接着,从服务器在上次成功更新的位置处开始进入更新操作。更新完成后从服务器开始进入等待状态,等待主服务器后续的更新。需要注意的是:在进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,可能发生对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。 2、MySQL同步细节 MySQL同步功能由3个线程(master上1个binlogdump,slave上2个,分别是Sql进程和IO进程)来实现。执行“STARTSLAVE”语句后,slave就创建一个I/O线程。I/O线程连接到master上,并请求master发送二进制日志中的语句。master创建一个线程来把日志的内容发送到slave上。slave上的I/O线程读取master的BinlogDump线程发送的语句,并且把它们拷贝到其数据目录下的中继日志(relaylogs)中。第三个是SQL线程,salve用它来读取中继日志,然后执行它们来更新数据。 slave上使用2个线程的优点是,把读日志和执行分开成2个独立的任务。执行任务如果慢的话,读日志任务不会跟着慢下来。 例如,如果slave停止了一段时间,那么I/O线程可以在slave启动后很快地从master上读取全部日志,尽管SQL线程可能落后I/O线程好几的小时。如果slave在SQL线程没全部执行完就停止了,但I/O线程却已经把所有的更新日志都读取并且保存在本地的中继日志中了,因此在slave再次启动后就会继续执行它们了。这就允许在master上清除二进制日志,因为slave已经无需去master读取更新日志了。 3、在test1,test2上安装MYSQL test1的ip:192.168.46.131test2的ip:192.168.46.130 test1为mastertest2为slave 安装MySQL有多种方法,这里仅以源码安装test1为列说明。 [root@test1 ~]# yum install libtermcap libtermcap-devel imake autoconf automake libtool m4 [root@test1 ~]# useradd -M -s /sbin/nologin mysql [root@test1 ~]# mkdir /usr/local/mysql [root@test1 ~]# tar zxvf mysql-5.1.70.tar.gz [root@test1 ~]# cd mysql-5.1.70 [root@test1 mysql-5.1.70]# ./configure --prefix=/usr/local/mysql --enable-assembler --with-client-ldflags=-all-static --with-unix-socket-path=/tmp --with-charset=utf8 --enable-thread-safe-client --with-pthread --without-debug --with-big-tables --enable-community-features --enable-profiling --enable-local-infile --with-fast-mutexes --with-plugins=partition,federated,ndbcluster,innobase,csv,blackhole,myisam,innodb_plugin [root@test1 mysql-5.1.70]#make [root@test1 mysql-5.1.70]#strip sql/mysqld [root@test1 mysql-5.1.70]#makeinstall [root@test1 mysql-5.1.70]# cp support-files/my-medium.cnf /etc/my.cnf [root@test1 mysql-5.1.70]# /usr/local/mysql/bin/mysql_install_db --user=mysql [root@test1 mysql-5.1.70]# echo "PATH="/usr/local/mysql/bin:$PATH"">> /etc/profile [root@test1 mysql-5.1.70]# export PATH="/usr/local/mysql/bin:$PATH" 4、在主服务器test1上编辑配置文件my.cnf 编辑主服务器的配置文件/etc/my.cnf,在[mysqld]中添加如下内容即可: server-id=1 #服务器ID。服务器之间不能有重复ID,一般master是1 log-bin=mysql-bin #打开mysql的binlog功能,后面的名字可以自己指定,如果不改名字的话,默认是以主机名字命名 binlog-do-db=test #test是需要备份的数据库名,如果备份多个数据库,重复设置这个选项即可 binlog-ignore-db=mysql #不需要备份的数据库名称,如果需要忽略备份多个数据库,重复设置这个选项即可。 (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |