本次實驗目的是在一臺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實現的是異步的複製,所以主從服務器之間存在一定的差距,在從服務器上進行的查詢操作需要考慮到這些數據的差異,一般只有更新不頻繁的數據或者對實時性要求不高的數據可以通過從服務器查詢,實時性要求高的數據仍然需要從主數據庫獲得。