mysql 未找到命令_MySQL主从复制配置说明,一文教你搞懂数据库主从复制
一,MySQL主從配置原理
1. mysql支持的復(fù)制格式
基于語(yǔ)句復(fù)制(STATEMENT)
- (優(yōu)點(diǎn))基于statement復(fù)制的優(yōu)點(diǎn)很明顯,簡(jiǎn)單的記錄執(zhí)行語(yǔ)句同步到從庫(kù)執(zhí)行同樣的語(yǔ)句,占用磁盤空間小,網(wǎng)絡(luò)傳輸快,并且通過mysqlbinlog工具容易讀懂其中的內(nèi)容 。
- (缺點(diǎn))并不是所有語(yǔ)句都能復(fù)制的比如:insert into table1(create_time) values(now()),取的是數(shù)據(jù)當(dāng)前時(shí)間,不同的數(shù)據(jù)可能時(shí)間不一致,另外像存儲(chǔ)過程和觸發(fā)器也可能存在問題。
基于行復(fù)制(ROW)
- (優(yōu)點(diǎn))從MySQL5.1開始支持基于行的復(fù)制,最大的好處是可以正確地復(fù)制每一行數(shù)據(jù)。一些語(yǔ)句可以被更加有效地復(fù)制,另外就是幾乎沒有基于行的復(fù)制模式無法處理的場(chǎng)景,對(duì)于所有的SQL構(gòu)造、觸發(fā)器、存儲(chǔ)過程等都能正確執(zhí)行。
- (缺點(diǎn))主要的缺點(diǎn)就是二進(jìn)制日志可能會(huì)很大,比如:update table1 set name='admin' where id<1000,基于行復(fù)制可能需要復(fù)制1000條記錄,而基于語(yǔ)句復(fù)制只有一條語(yǔ)句,另外一個(gè)缺點(diǎn)就是不直觀,所以,你不能使用mysqlbinlog來查看二進(jìn)制日志。
混合類型的復(fù)制(MIXED)
- 混合復(fù)制是借用語(yǔ)句復(fù)制和行復(fù)制的有點(diǎn)進(jìn)行整合,MIXED也是MySQL默認(rèn)使用的二進(jìn)制日志記錄方式,但MIXED格式默認(rèn)采用基于語(yǔ)句的復(fù)制,一旦發(fā)現(xiàn)基于語(yǔ)句的無法精確的復(fù)制時(shí),就會(huì)采用基于行的復(fù)制。比如用到UUID()、USER()、CURRENT_USER()、ROW_COUNT()等無法確定的函數(shù)。
2. mysql主從復(fù)制作用
- 數(shù)據(jù)分布
- 主從分?jǐn)傌?fù)載。
- 高可用性和故障切換。
- 數(shù)據(jù)備份。
- 利用從服務(wù)器做查詢。
3. mysql主從復(fù)制原理
- binlog Events 我們知道binlog日志用于記錄所有對(duì)MySQL的操作的變更,而這每一個(gè)變更都會(huì)對(duì)應(yīng)的事件,也就是Event。index文件記錄了所有的binlog位置 每個(gè)binlog會(huì)有heade, event,rotate三個(gè)event,binlog的結(jié)構(gòu)如下。
常見event如下:
- Format_desc:一個(gè)全新的binlog日志文件event信息
- Rotate :日志分割時(shí)結(jié)束event。
- Table_map:表,列等元數(shù)據(jù)的event。
- Query:查詢,就是DDL這類的Event,如果binlog格式為STATEMENT格式,增刪改都屬于Qeury event。
- Write_rows:Binlog為ROW格式時(shí)的插入event。
- Update_rows:Binlog為ROW格式時(shí)的更新event。
- Delete_rows:Binlog為ROW格式時(shí)的刪除event。
我們也可以通過binlog 看到這些事件,通過mysql提供的工具查看binlog日志,如下:
主從復(fù)制流程
- 當(dāng)從庫(kù)發(fā)出 start slave命令時(shí),從庫(kù)會(huì)創(chuàng)建I/O線程和SQL thread(SQL線程)
- 從庫(kù)的IO和主庫(kù)的dump線程建立連接 并監(jiān)聽binlog二進(jìn)制日志事件
- 從庫(kù)根據(jù)change master to 語(yǔ)句提供的file名和position號(hào),IO線程向主庫(kù)發(fā)起binlog的請(qǐng)求
- 主庫(kù)dump線程根據(jù)從庫(kù)的請(qǐng)求,將本地binlog以events的方式發(fā)給從庫(kù)IO線程
- 從庫(kù)IO線程接收binlog evnets,并存放到本地relay-log中,傳送過來的信息,會(huì)記錄到http://master.info中。
- 從庫(kù)SQL線程應(yīng)用relay-log,并且把應(yīng)用過的記錄到relay-log.info,默認(rèn)情況下,已經(jīng)應(yīng)用過的relay會(huì)自動(dòng)被清理purge。
二,MySQL只從配置缺陷
MySQL的復(fù)制(replication)功能配置簡(jiǎn)單,深受開發(fā)人員的喜歡,基于復(fù)制的讀寫分離方案也非常流行。而MySQL數(shù)據(jù)庫(kù)高可用大多也是基于復(fù)制技術(shù),但是MySQL復(fù)制本身依然存在部分缺陷,最為主要的問題如下: 復(fù)制代碼- 數(shù)據(jù)丟失問題(consistency)
- 數(shù)據(jù)同步延遲問題(delay)
- 擴(kuò)展性問題(scalability)
三,準(zhǔn)備工作
準(zhǔn)備3臺(tái)服務(wù)器分別為:
Master 192.168.1.234
Slave 192.168.1.235
Slave 192.168.1.236
四,MySQL安裝配置
下載MySQL安裝包
下載地址:cdn.mysql.com//Downloads/…
解壓安裝文件:
[root@localhost ~]# cd /software[root@localhost software]# tar -zxzf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz 復(fù)制代碼拷貝安裝文件到指定文件夾:
[root@localhost ~]# cp /software/mysql-5.7.17-linux-glibc2.5-x86_64/* /usr/local/mysql -r 復(fù)制代碼添加系統(tǒng)mysql組和mysql用戶
[root@localhost ~]# groupadd mysql[root@localhost ~]# useradd -r -g mysql mysql 復(fù)制代碼進(jìn)入安裝mysql軟件目錄:執(zhí)行命令 cd /usr/local/mysql
修改當(dāng)前目錄擁有者為mysql用戶:執(zhí)行命令 chown -R mysql:mysql ./
安裝數(shù)據(jù)庫(kù):
5.6以及之前版本安裝數(shù)據(jù)庫(kù)
/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
5.7版本安裝數(shù)據(jù)庫(kù):
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/ --initialize
拷貝配置文件到指定文件夾
[root@localhost mysql]# cp -a ./support-files/my-default.cnf /etc/my.cnf
[root@localhost mysql]# cp -a ./support-files/mysql.server /etc/init.d/mysqld
后臺(tái)啟動(dòng)mysql
[root@localhost mysql]# ./bin/mysqld_safe --user=mysql &
重啟mysql
執(zhí)行命令: /etc/init.d/mysqld restart
設(shè)置為開機(jī)啟動(dòng):
執(zhí)行命令:chkconfig --level 35 mysqld on
初始化密碼:
依據(jù)官方說明5.6以后版本,第一次啟動(dòng)時(shí)會(huì)在root目錄下生產(chǎn)一個(gè)隨機(jī)密碼文件名.mysql_secret。
cat /root/.mysql_secret
修改root密碼:
/usr/local/mysql/bin/mysqladmin -u root -h localhost password '123456' -p
Enter password處輸入輸入.mysql_secret里第二行內(nèi)容
遇上-bash: mysql: command not found(未找到命令)的情況別著急,這個(gè)是因?yàn)?usr/local/bin目錄下缺失mysql導(dǎo)致,只需要一下方法建立軟鏈接,即可以解決
ln -s /usr/local/mysql/bin/mysql /usr/bin
五,MySQL主從復(fù)制配置
下載MySQL安裝包
Master服務(wù)器my.cnf增加配置:
#GTID:server_id=234 #服務(wù)器id,一般為IP末位gtid_mode=on #開啟gtid模式enforce_gtid_consistency=on #強(qiáng)制gtid一致性,開啟后對(duì)于特定create table不被支持 #binloglog_bin=/usr/local/mysql/binlogs/master-binloglog-slave-updates=1 binlog_format=row #強(qiáng)烈建議,其他格式可能造成數(shù)據(jù)不一致 #relay logskip_slave_start=1 復(fù)制代碼Slave服務(wù)器my.cnf增加配置:
#GTID:gtid_mode=onenforce_gtid_consistency=onserver_id=235 #binloglog-bin=/usr/local/mysql/binlogs/slave-binloglog-slave-updates=1binlog_format=row #強(qiáng)烈建議,其他格式可能造成數(shù)據(jù)不一致 #relay logskip_slave_start=1read-only = ON #這項(xiàng)功能只對(duì)非管理員組以為的用戶有效 復(fù)制代碼在Master服務(wù)器上創(chuàng)建用于同步的賬號(hào):
create user 'cspmslave'@'192.168.1.%' identified by 'cspm-slave';
對(duì)賬號(hào)進(jìn)行Slave授權(quán):
grant replication slave on . to cspmslave@'192.168.1.%';
從庫(kù)連接主庫(kù)
mysql> change master to master_host='192.168.1.234', master_port=3306, master_user='cspmslave', master_password='cspm-slave', master_auto_position=1;
mysql> start slave;
查看從服務(wù)器連接狀態(tài)(下圖所示,兩個(gè)Yes表示連接成功):
mysql> show slave status G;
作者:小林啊鏈接:https://juejin.cn/post/6907499323810906126
來源:掘金
侵刪
總結(jié)
以上是生活随笔為你收集整理的mysql 未找到命令_MySQL主从复制配置说明,一文教你搞懂数据库主从复制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql安装10045_mysql数据
- 下一篇: mysql输出代码_mysql常用代码