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