本次实验目的是在一台linux服务器上面做mysql主从复制,实验环境为rhel4.6,用到的mysql为rhel4.6系统盘里的rpm包。这种主从复制也是一种方法。
#mount /dev/cdrom /media
#rpm -Uvh mysql-4.1.20-2.RHEL4.1.0.1.i386.rpm mysql-server-4.1.20-2.RHEL4.1.0.1.i386.rpm mysql-devel-4.1.20-2.RHEL4.1.0.1.i386.rpm perl-DBD-MySQL-2.9004-3.1.i386.rpm openssl-devel-0.9.7a-43.17.el4_6.1.i386.rpm krb5-devel-1.3.4-54.i386.rpm zlib-devel-1.2.1.2-1.2.i386.rpm
#ps aux |grep mysql
/usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql - -user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking -- socket=/var/lib/mysql/mysql.sock
#mkdir /mysqllog
#chmod 777 /mysqllog
#chown mysql.mysql /mysqllog
#/usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --pid-file=/var/run/mysqld/mysqld.pid --skip-locking --socket=/var/lib/mysql/mysql.sock --port=3306 --log-bin=/mysqllog/ --server-id=1 &
到这里主mysql服务器配置完成
#cp -rp /var/lib/mysql /var/lib/mysql-new
/usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql-new --user=mysql --pid-file=/var/run/mysqld/mysqld-new.pid --skip-locking --socket=/var/lib/mysql/mysql-new.sock --port=3307 --server-id=2 &
从mysql数据库也已经做好了,下面进入从mysql服务器操作:
mysql> change master to master_host='127.0.0.1',master_port=3306,master_user='root';
mysql> start slave;
到这里从服务器可以和主mysql数据库同步。
进入/mysqllog里面,
然后#ls -a 会发现里面多出了几个隐藏文件
打开.000001会发现里面有刚刚在主数据库上面操作的内容
用mysql系统自带的工具mysqlbinlog查看该文件会更具体些:
mysql主从复制原理:
复制是指将主数据库的DDL和DML操作通过二进制日志传到复制 服务器上(也就是从服务器),然后在从服务器上对这些日志重新执行(即重做),从而使得从服务器和主服务器的数据保持同步。
mysql支持一台主服务器同时向多台从服务器进行复制,从服务器同时也可以作为其他服务器的主服务器,实现链状的复制。
mysql复制的优点主要包括以下3个方面:
第一:如果主服务器出现问题,可以快速切换到从服务器提供服务器;
第二:可以在从服务器上执行查询操作,降低主服务器的访问压力;
第三:可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。
注意:由于mysql实现的是异步的复制,所以主从服务器之间存在一定的差距,在从服务器上进行的查询操作需要考虑到这些数据的差异,一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据仍然需要从主数据库获得。