日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql主从复制实验(附编译安装mysql脚本)

發(fā)布時(shí)間:2024/3/12 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql主从复制实验(附编译安装mysql脚本) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mysql主從復(fù)制

  • 原理
  • 環(huán)境準(zhǔn)備
  • 實(shí)驗(yàn)步驟

原理

1、當(dāng)我們的數(shù)據(jù)庫主服務(wù)器發(fā)生了寫操作數(shù)據(jù)發(fā)生了變化時(shí),二進(jìn)制日志就會(huì)記錄,然后主服務(wù)器主動(dòng)通知從服務(wù)器過來拿二進(jìn)制日志,此時(shí),Slave服務(wù)器的IO線程會(huì)通過在master上已經(jīng)授權(quán)的復(fù)制用戶權(quán)限請(qǐng)求連接master服務(wù)器,并且攜帶master.info的信息,以便讓master知道該從哪個(gè)位置開始拿日志給Slave,此時(shí)master會(huì)起一個(gè)log dump的線程來接待;2、當(dāng)Slave服務(wù)器的IO線程獲取到Master服務(wù)器上dump線程發(fā)送的日志內(nèi)容、日志文件及位置點(diǎn)后,會(huì)將binlog日志內(nèi)容依次寫到Slave端自身的Relay Log(即中繼日志)文件(Mysql-relay-bin.xxx)的最末端,并將新的binlog文件名和位置記錄到master-info文件中,以便下一次讀取master端新binlog日志時(shí)能告訴Master服務(wù)器從新binlog日志的指定文件及位置開始讀取新的binlog日志內(nèi)容;3、Slave服務(wù)器端的SQL線程會(huì)實(shí)時(shí)檢測(cè)本地Relay Log 中IO線程新增的日志內(nèi)容,然后及時(shí)把Relay LOG 文件中的內(nèi)容解析成sql語句,并在自身Slave服務(wù)器上按解析SQL語句的位置順序執(zhí)行應(yīng)用這樣sql語句,并在relay-log.info中記錄當(dāng)前應(yīng)用中繼日志的文件名和位置點(diǎn)。

環(huán)境準(zhǔn)備

  • 兩臺(tái)linux服務(wù)器(2核心、4G)、centos7、MySQL5.7.29(我們這里使用的是腳本一鍵編譯安裝mysql)

    #編譯安裝mysql 5.7.29 #os: centos7.8.2003 #####################################第1步 #假定mysql的源碼包已經(jīng)上傳到linux服務(wù)器里的當(dāng)前目錄下(可以去各大國內(nèi)源或官方下載) #安裝解決軟件依賴關(guān)系的包 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步:進(jìn)入/root/rpmbuild目錄 cd /root/rpmbuild/SOURCES#第4步:新建用戶 useradd -r -s /sbin/nologin mysql #第5步:新建數(shù)據(jù)目錄 mkdir -p /data/mysql #第6步:修改數(shù)據(jù)目錄的擁有者為mysql chown mysql:mysql /data/mysql #第7步:解壓真正的源碼包 tar xf mysql-5.7.29.tar.gz tar xf boost_1_59_0.tar.bz2 #將boost包移動(dòng)到mysql解壓的包里 mv boost_1_59_0 mysql-5.7.29#第8步:進(jìn)入解壓后的目錄 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步:編譯,啟動(dòng)2個(gè)進(jìn)程去編譯,加快速度 make -j 2 #第11步:安裝編譯好的二進(jìn)制文件到指定的目錄 --》復(fù)制當(dāng)前目錄下編譯好的二進(jìn)制文件到當(dāng)時(shí)指定的目錄 make install #第12步:備份原來的my.cnf配置文件,然后清空這個(gè)文件,這個(gè)文件是mariadb的配置文件,不是mysql的 cp /etc/my.cnf /root/mysql.cnf.bak >/etc/my.cnf#第13步:進(jìn)入編譯安裝好的mysql的目錄--》安裝目錄 cd /usr/local/sc_mysql/bin #執(zhí)行mysqld這個(gè)程序,初始化我們的mysql,并且將日志和臨時(shí)密碼重定向到/root/temp_password.txt文件里 ./mysqld --initialize --user=mysql --basedir=/usr/local/sc_mysql/ --datadir=/data/mysql &>/root/temp_password.txt#第14步:修改PATH變量,在linux系統(tǒng)里可以找到我們編譯安裝的mysql相關(guān)的命令 #/etc/profile /etc/bashrc /root/.bashrc /root/.bash_profile #修改PATH變量,讓linux系統(tǒng)里有mysql相關(guān)的命令 PATH=$PATH:/usr/local/sc_mysql/bin echo 'PATH=$PATH:/usr/local/sc_mysql/bin' >>/etc/bashrc#第15步:就是拷貝mysqld的程序文件到指定的目錄,方便后面設(shè)置mysqld服務(wù)開機(jī)啟動(dòng)--》mysqld服務(wù)的啟動(dòng)、停止、重啟的腳本 cp ../support-files/mysql.server /etc/init.d/mysqld#第16步:關(guān)閉防火墻和selinux #關(guān)閉防火墻firewalld服務(wù) service firewalld stop #設(shè)置firewalld服務(wù)開機(jī)不啟動(dòng) systemctl disable firewalld #臨時(shí)關(guān)閉selinux setenforce 0 #永久修改selinux配置文件里的內(nèi)容 sed -i 's/=enforcing/=disabled/g' /etc/selinux/config#第17步:設(shè)置MySQL開機(jī)啟動(dòng) chkconfig mysqld on#第18步:啟動(dòng)MySQL service mysqld start#第19步:登錄進(jìn)去MySQL并且重新設(shè)置密碼Sanchuang123# #從保存的臨時(shí)密碼文件里,截取出臨時(shí)密碼,賦值給一個(gè)變量temp_pwd temp_pwd=$(cat /root/temp_password.txt |tail -1|awk '{print $11}') #給MySQL設(shè)置密碼為Sanchuang123# mysql -uroot -p$temp_pwd --connect-expired-password -e "set password='Sanchuang123#'"echo '###### congratulation! your mysql has be installed successfully ######'

實(shí)驗(yàn)步驟

  • 1.修改mysql的配置文件,啟動(dòng)二進(jìn)制日志功能:
    在主服務(wù)器上開啟二進(jìn)制日志,server_id=1

    #binary loglog_binserver_id = 1

    在從服務(wù)器上也可以開啟二進(jìn)制日志,server_id=2

    #binary loglog_binserver_id = 2
  • 2.在主服務(wù)器上新建并且授權(quán)一個(gè)用戶,用于復(fù)制二進(jìn)制日志:

    grant replication slave on *.* to 'oudi'@'192.168.0.177' identified by 'Sanchuang123#';
  • 3.備份出主服務(wù)器上的數(shù)據(jù),然后到導(dǎo)入到從服務(wù)器上:

    [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]#在從服務(wù)器上導(dǎo)入數(shù)據(jù)[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.在從服務(wù)器上配置master 的信息:

    #在主服務(wù)器上查看當(dāng)前的二進(jìn)制日志的文件和位置號(hào)root@(none) 15:12 mysql>show master status;root@(none) 15:19 mysql>flush logs; 刷新二進(jìn)制日志root@(none) 15:20 mysql>show master status; 再次查看并記錄位置號(hào) #在從服務(wù)器上配置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的狀態(tài)信息 *************************** 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上關(guān)閉防火墻和selinux:

    主服務(wù)器[root@sc-mysql-master backup]service firewalld stopRedirecting to /bin/systemctl stop firewalld.service[root@sc-mysql-master backup]getenforce Permissive從服務(wù)器[root@sc-mysql-slave ~]service firewalld stopRedirecting to /bin/systemctl stop firewalld.service[root@sc-mysql-slave ~]getenforce Disabled
  • 6.在slave上啟動(dòng)復(fù)制功能:

    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表示主從復(fù)制已經(jīng)配置成功了
  • 7.驗(yàn)證主從復(fù)制的效果:

    在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/ 到數(shù)據(jù)目錄下查看 [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

總結(jié)

以上是生活随笔為你收集整理的mysql主从复制实验(附编译安装mysql脚本)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。