mysql主从复制实验(附编译安装mysql脚本)
mysql主從復制
- 原理
- 環境準備
- 實驗步驟
原理
1、當我們的數據庫主服務器發生了寫操作數據發生了變化時,二進制日志就會記錄,然后主服務器主動通知從服務器過來拿二進制日志,此時,Slave服務器的IO線程會通過在master上已經授權的復制用戶權限請求連接master服務器,并且攜帶master.info的信息,以便讓master知道該從哪個位置開始拿日志給Slave,此時master會起一個log dump的線程來接待;2、當Slave服務器的IO線程獲取到Master服務器上dump線程發送的日志內容、日志文件及位置點后,會將binlog日志內容依次寫到Slave端自身的Relay Log(即中繼日志)文件(Mysql-relay-bin.xxx)的最末端,并將新的binlog文件名和位置記錄到master-info文件中,以便下一次讀取master端新binlog日志時能告訴Master服務器從新binlog日志的指定文件及位置開始讀取新的binlog日志內容;3、Slave服務器端的SQL線程會實時檢測本地Relay Log 中IO線程新增的日志內容,然后及時把Relay LOG 文件中的內容解析成sql語句,并在自身Slave服務器上按解析SQL語句的位置順序執行應用這樣sql語句,并在relay-log.info中記錄當前應用中繼日志的文件名和位置點。
環境準備
-
兩臺linux服務器(2核心、4G)、centos7、MySQL5.7.29(我們這里使用的是腳本一鍵編譯安裝mysql)
#編譯安裝mysql 5.7.29 #os: centos7.8.2003 #####################################第1步 #假定mysql的源碼包已經上傳到linux服務器里的當前目錄下(可以去各大國內源或官方下載) #安裝解決軟件依賴關系的包 yum install cmake ncurses-devel gcc gcc-c++ vim lsof bzip2 openssl-devel -y #第2步:解壓src的rpm包 rpm -ivh mysql-community-5.7.29-1.el7.src.rpm#第3步:進入/root/rpmbuild目錄 cd /root/rpmbuild/SOURCES#第4步:新建用戶 useradd -r -s /sbin/nologin mysql #第5步:新建數據目錄 mkdir -p /data/mysql #第6步:修改數據目錄的擁有者為mysql chown mysql:mysql /data/mysql #第7步:解壓真正的源碼包 tar xf mysql-5.7.29.tar.gz tar xf boost_1_59_0.tar.bz2 #將boost包移動到mysql解壓的包里 mv boost_1_59_0 mysql-5.7.29#第8步:進入解壓后的目錄 cd mysql-5.7.29#第9步:編譯前的配置 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/sc_mysql -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_BOOST=boost_1_59_0#第10步:編譯,啟動2個進程去編譯,加快速度 make -j 2 #第11步:安裝編譯好的二進制文件到指定的目錄 --》復制當前目錄下編譯好的二進制文件到當時指定的目錄 make install #第12步:備份原來的my.cnf配置文件,然后清空這個文件,這個文件是mariadb的配置文件,不是mysql的 cp /etc/my.cnf /root/mysql.cnf.bak >/etc/my.cnf#第13步:進入編譯安裝好的mysql的目錄--》安裝目錄 cd /usr/local/sc_mysql/bin #執行mysqld這個程序,初始化我們的mysql,并且將日志和臨時密碼重定向到/root/temp_password.txt文件里 ./mysqld --initialize --user=mysql --basedir=/usr/local/sc_mysql/ --datadir=/data/mysql &>/root/temp_password.txt#第14步:修改PATH變量,在linux系統里可以找到我們編譯安裝的mysql相關的命令 #/etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile #修改PATH變量,讓linux系統里有mysql相關的命令 PATH=$PATH:/usr/local/sc_mysql/bin echo 'PATH=$PATH:/usr/local/sc_mysql/bin' >>/etc/bashrc#第15步:就是拷貝mysqld的程序文件到指定的目錄,方便后面設置mysqld服務開機啟動--》mysqld服務的啟動、停止、重啟的腳本 cp ../support-files/mysql.server /etc/init.d/mysqld#第16步:關閉防火墻和selinux #關閉防火墻firewalld服務 service firewalld stop #設置firewalld服務開機不啟動 systemctl disable firewalld #臨時關閉selinux setenforce 0 #永久修改selinux配置文件里的內容 sed -i 's/=enforcing/=disabled/g' /etc/selinux/config#第17步:設置MySQL開機啟動 chkconfig mysqld on#第18步:啟動MySQL service mysqld start#第19步:登錄進去MySQL并且重新設置密碼Sanchuang123# #從保存的臨時密碼文件里,截取出臨時密碼,賦值給一個變量temp_pwd temp_pwd=$(cat /root/temp_password.txt |tail -1|awk '{print $11}') #給MySQL設置密碼為Sanchuang123# mysql -uroot -p$temp_pwd --connect-expired-password -e "set password='Sanchuang123#'"echo '###### congratulation! your mysql has be installed successfully ######'
實驗步驟
-
1.修改mysql的配置文件,啟動二進制日志功能:
#binary loglog_binserver_id = 1
在主服務器上開啟二進制日志,server_id=1在從服務器上也可以開啟二進制日志,server_id=2
#binary loglog_binserver_id = 2 -
2.在主服務器上新建并且授權一個用戶,用于復制二進制日志:
grant replication slave on *.* to 'oudi'@'192.168.0.177' identified by 'Sanchuang123#'; -
3.備份出主服務器上的數據,然后到導入到從服務器上:
[root@sc-mysql-master ~]# mysqldump -uroot -p'Sanchuang123#' --all-databases > /backup/all_db.sql[root@sc-mysql-master backup]# scp all_db.sql root@192.168.0.177:/rootall_db.sql 100% 11MB 21.0MB/s 00:00 [root@sc-mysql-master backup]#在從服務器上導入數據[root@sc-mysql-slave ~]# mysql -uroot -p'Sanchuang1234#' <all_db.sql mysql: [Warning] Using a password on the command line interface can be insecure. -
4.在從服務器上配置master 的信息:
#在主服務器上查看當前的二進制日志的文件和位置號root@(none) 15:12 mysql>show master status;root@(none) 15:19 mysql>flush logs; 刷新二進制日志root@(none) 15:20 mysql>show master status; 再次查看并記錄位置號 #在從服務器上配置master的信息[root@sc-mysql-slave ~]mysql -uroot -p'Sanchuang1234#'root@(none) 15:26 mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.83' ,-> MASTER_USER='oudi',-> MASTER_PASSWORD='Sanchuang123#',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='sc-mysql-master-bin.000002',-> MASTER_LOG_POS=154; Query OK, 0 rows affected, 2 warnings (0.04 sec)root@(none) 15:27 mysql> root@(none) 15:27 mysql>show slave status \G; 查看slave的狀態信息 *************************** 1. row ***************************Slave_IO_State: Master_Host: 192.168.0.83Master_User: oudiMaster_Port: 3306Connect_Retry: 60Master_Log_File: sc-mysql-master-bin.000002Read_Master_Log_Pos: 154Relay_Log_File: sc-mysql-slave-relay-bin.000001Relay_Log_Pos: 4Relay_Master_Log_File: sc-mysql-master-bin.000002Slave_IO_Running: NoSlave_SQL_Running: No -
5.在master和slave上關閉防火墻和selinux:
主服務器[root@sc-mysql-master backup]service firewalld stopRedirecting to /bin/systemctl stop firewalld.service[root@sc-mysql-master backup]getenforce Permissive從服務器[root@sc-mysql-slave ~]service firewalld stopRedirecting to /bin/systemctl stop firewalld.service[root@sc-mysql-slave ~]getenforce Disabled -
6.在slave上啟動復制功能:
oot@(none) 15:33 mysql>start slave; Query OK, 0 rows affected (0.01 sec)root@(none) 15:33 mysql> root@(none) 15:33 mysql>show slave status \G; *************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.0.83Master_User: oudiMaster_Port: 3306Connect_Retry: 60Master_Log_File: sc-mysql-master-bin.000002Read_Master_Log_Pos: 154Relay_Log_File: sc-mysql-slave-relay-bin.000002Relay_Log_Pos: 330Relay_Master_Log_File: sc-mysql-master-bin.000002Slave_IO_Running: Yes --》是yesSlave_SQL_Running: Yes --》是yes表示主從復制已經配置成功了 -
7.驗證主從復制的效果:
在master上新建庫 root@(none) 15:36 mysql>create database zouweicheng; Query OK, 1 row affected (0.00 sec)root@(none) 15:36 mysql>use zouweicheng Database changed root@zouweicheng 15:37 mysql>show tables; Empty set (0.00 sec)root@zouweicheng 15:37 mysql>create table t1(id int); Query OK, 0 rows affected (0.06 sec)root@zouweicheng 15:38 mysql>insert into t1 values(1),(2); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0 -
8.到slave上去看master.info 和relay-log.info:
[root@sc-mysql-slave ~]cd /data/mysql/ 到數據目錄下查看 [root@sc-mysql-slave mysql]cat master.info 25 sc-mysql-master-bin.000002 782 192.168.0.83 oudi Sanchuang123# 3306 60 0[root@sc-mysql-slave mysql]cat relay-log.info 7 ./sc-mysql-slave-relay-bin.000002 958 sc-mysql-master-bin.000002 782 0 0 1
總結
以上是生活随笔為你收集整理的mysql主从复制实验(附编译安装mysql脚本)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++课程设计-失物招领系统
- 下一篇: Best Time to Buy and