Linux安裝Mysql8.0.20并配置主從復制(一主一從,雙主雙從)
1. 主從復制解釋
將主數(shù)據(jù)庫的增刪改查等操作記錄到二進制日志文件中,從庫接收主庫日志文件,根據(jù)最后一次更新的起始位置,同步復制到從數(shù)據(jù)庫中,使得主從數(shù)據(jù)庫保持一致。
2. 主從復制的作用
- 高可用性:主數(shù)據(jù)庫異??汕袚Q到從數(shù)據(jù)庫
- 負載均衡:實現(xiàn)讀寫分離
- 備份:進行日常備份
3. Mysql主從復制過程
Binary log:主數(shù)據(jù)庫的二進制日志;Relay log:從服務器的中繼日志。
復制過程:
(1)主數(shù)據(jù)庫在每次事務完成前,將該操作記錄到binlog日志文件中;
(2)從數(shù)據(jù)庫中有一個I/O線程,負責連接主數(shù)據(jù)庫服務,并讀取binlog日志變化,如果發(fā)現(xiàn)有新的變動,則將變動寫入到relay-log,否則進入休眠狀態(tài);
(3)從數(shù)據(jù)庫中的SQL Thread讀取中繼日志,并串行執(zhí)行SQL事件,使得從數(shù)據(jù)庫與主數(shù)據(jù)庫始終保持一致。
注意事項:
(1)涉及時間函數(shù)時,會出現(xiàn)數(shù)據(jù)不一致。原因是,復制過程的兩次IO操作和網(wǎng)絡、磁盤效率等問題勢必導致時間戳不一致;
(2)涉及系統(tǒng)函數(shù)時,會出現(xiàn)不一致。如:@@hostname,獲取主機名稱,主從數(shù)據(jù)庫服務器名稱不一致導致數(shù)據(jù)不一致;
(3)......
4. 一主一從配置
服務器劃分
服務器IP | 角色 |
---|---|
192.168.133.129 | Master1 |
192.168.133.130 | Slave1 |
主數(shù)據(jù)庫安裝
# 進入目錄 cd /opt # 下載安裝包 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz # 解壓 tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz # 拷貝到/usr/local mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local # 進入/usr/local cd /usr/local # 修改名稱為mysql-8.0.20 mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20 # 創(chuàng)建存放數(shù)據(jù)文件夾 mkdir /usr/local/mysql-8.0.20/data # 創(chuàng)建用戶及用戶組 groupadd mysql useradd -g mysql mysql # 授權 chown -R mysql.mysql /usr/local/mysql-8.0.20 # 初始化數(shù)據(jù)庫(記錄臨時密碼) cd /usr/local/mysql-8.0.20/ ./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize ; # 配置my.cnf vi /etc/my.cnf # 清空,使用下面內容 // 文件內容開始 [mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主從復制-主機配置 # 主服務器唯一ID server-id=1 # 啟用二進制日志 log-bin=mysql-bin # 設置不要復制的數(shù)據(jù)庫(可設置多個) binlog-ignore-db=sys binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema # 設置需要復制的數(shù)據(jù)庫(可設置多個) binlog-do-db=test # 設置logbin格式 binlog_format=STATEMENT // 文件內容結束 # 建立Mysql服務 cp -a ./support-files/mysql.server /etc/init.d/mysql chmod +x /etc/init.d/mysql chkconfig --add mysql # 檢查服務是否生效 chkconfig --list mysql # 啟動、停止、重啟 service mysql start service mysql stop service mysql restart # 創(chuàng)建軟連接 ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin # 登錄(使用臨時密碼) mysql -uroot -p # 修改密碼 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password'; # 退出,使用新密碼登錄 quit mysql -uroot -p # 修改root權限,增加遠程連接 use mysql update user set host ='%' where user='root'; alter user 'root'@'%' identified with mysql_native_password by 'new password'; flush privileges; # 退出 quit
從數(shù)據(jù)庫安裝
和主數(shù)據(jù)庫安裝一致,但配置文件內容不同。
# 配置my.cnf vi /etc/my.cnf # 清空,使用下面內容 // 文件內容開始 [mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主從復制-從機配置 # 從服務器唯一ID server-id=2 # 啟用中繼日志 relay-log=mysql-relay // 文件內容結束
關閉主從數(shù)據(jù)庫服務器防火墻或開放3306端口
# 查看防火墻狀態(tài) systemctl status firewalld # 關閉防火墻 systemctl stop firewalld
主從數(shù)據(jù)庫測試是否已經(jīng)可以遠程訪問
# 主數(shù)據(jù)庫服務器測試從數(shù)據(jù)庫 mysql -uroot -p -h192.168.133.130 -P3306 # 從數(shù)據(jù)庫服務器測試主數(shù)據(jù)庫 mysql -uroot -p -h192.168.133.129 -P3306
主數(shù)據(jù)庫創(chuàng)建用戶slave并授權
# 登錄 mysql -uroot -p # 創(chuàng)建用戶 create user 'slave'@'%' identified with mysql_native_password by 'password'; # 授權 grant replication slave on *.* to 'slave'@'%'; # 刷新權限 flush privileges;
從數(shù)據(jù)庫驗證slave用戶是否可用
復制代碼 代碼如下:mysql -uslave -p -h192.168.133.129 -P3306
主數(shù)據(jù)庫查詢服務ID及Master狀態(tài)
# 登錄 mysql -uroot -p # 查詢server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可設置臨時ID(重啟失效) set global server_id = 1; # 查詢Master狀態(tài),并記錄 File 和 Position 的值 show master status; # 注意:執(zhí)行完此步驟后退出主數(shù)據(jù)庫,防止再次操作導致 File 和 Position 的值發(fā)生變化
從數(shù)據(jù)庫中設置主數(shù)據(jù)庫
# 登錄 mysql -uroot -p # 查詢server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可設置臨時ID(重啟失效) set global server_id = 2; # 設置主數(shù)據(jù)庫參數(shù) change master to master_host='192.168.133.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156; # 開始同步 start slave; # 若出現(xiàn)錯誤,則停止同步,重置后再次啟動 stop slave; reset slave; start slave; # 查詢Slave狀態(tài) show slave status\G # 查看是否配置成功 # 查看參數(shù) Slave_IO_Running 和 Slave_SQL_Running 是否都為yes,則證明配置成功。若為no,則需要查看對應的 Last_IO_Error 或 Last_SQL_Error 的異常值。
測試
通過工具連接主從數(shù)據(jù)庫或者在服務器連接。
注意:主數(shù)據(jù)庫的配置文件中配置了需要同步的數(shù)據(jù)庫,因此只會同步配置的數(shù)據(jù)庫,不配置則同步全部。
# 在主數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫test create database test; # 從數(shù)據(jù)庫查看 show databases; # 在主數(shù)據(jù)庫創(chuàng)建表 use test; create table t_user(id int, name varchar(20)); # 插入數(shù)據(jù) insert into t_user values(1, 'C3Stones'); # 在從數(shù)據(jù)庫查看 use test; select * from t_user; # 其他刪改查操作請自行測試
5. 雙主雙從配置
雙主雙從即兩臺主機分別存在兩臺從機,每臺從機只復制對應的主機,兩臺主機互為主備。
服務器劃分
服務器IP | 角色 |
---|---|
192.168.133.129 | Master1 |
192.168.133.130 | Slave1 |
192.168.133.131 | Master2 |
192.168.133.132 | Slave2 |
安裝數(shù)據(jù)庫請參考上述安裝主數(shù)據(jù)庫
四個配置文件替換如下:
(1)Mater1
[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主從復制-主機1配置 # 主服務器唯一ID server-id=1 # 啟用二進制日志 log-bin=mysql-bin # 設置不要復制的數(shù)據(jù)庫(可設置多個) binlog-ignore-db=sys binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema # 設置需要復制的數(shù)據(jù)庫(可設置多個) binlog-do-db=test # 設置logbin格式 binlog_format=STATEMENT # 寫入操作更新二進制日志文件 log-slave-updates # 自增長字段起始值,默認值為1,取值范圍:1 ~ 65535 auto-increment-increment=2 # 自增長字段遞增量,取值范圍:1 ~ 65535 auto-increment-offset=1
(2)Mater2
[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主從復制-主機2配置 # 主服務器唯一ID server-id=3 # 啟用二進制日志 log-bin=mysql-bin # 設置不要復制的數(shù)據(jù)庫(可設置多個) binlog-ignore-db=sys binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema # 設置需要復制的數(shù)據(jù)庫(可設置多個) binlog-do-db=test # 設置logbin格式 binlog_format=STATEMENT # 寫入操作更新二進制日志文件 log-slave-updates # 自增長字段起始值,默認值為1,取值范圍:1 ~ 65535 auto-increment-increment=2 # 自增長字段遞增量,取值范圍:1 ~ 65535 auto-increment-offset=2
(3)Slave1
[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主從復制-從機1配置 # 從服務器唯一ID server-id=2 # 啟用中繼日志 relay-log=mysql-relay
(4)Slave2
[mysqld] basedir=/usr/local/mysql-8.0.20 datadir=/usr/local/mysql-8.0.20/data character-set-server=utf8 lower-case-table-names=1 default_authentication_plugin=mysql_native_password # 主從復制-從機2配置 # 從服務器唯一ID server-id=4 # 啟用中繼日志 relay-log=mysql-relay
雙主雙從數(shù)據(jù)庫均重啟
service restart mysql
四臺服務器均關閉防火墻
systemctl stop firewalld
兩臺主數(shù)據(jù)庫分別創(chuàng)建用戶slave并授權
# 登錄 mysql -uroot -p # 創(chuàng)建用戶 create user 'slave'@'%' identified with mysql_native_password by 'password'; # 授權 grant replication slave on *.* to 'slave'@'%'; # 刷新權限 flush privileges;
主從數(shù)據(jù)庫驗證slave用戶是否可用
# 主數(shù)據(jù)庫1服務器測試 mysql -uslave -p -h192.168.133.130 -P3306 mysql -uslave -p -h192.168.133.131 -P3306 # 從數(shù)據(jù)庫1服務器測試主數(shù)據(jù)庫1 mysql -uroot -p -h192.168.133.129 -P3306 # 主數(shù)據(jù)庫2服務器測試 mysql -uslave -p -h192.168.133.129 -P3306 mysql -uslave -p -h192.168.133.132 -P3306 # 從數(shù)據(jù)庫1服務器測試主數(shù)據(jù)庫1 mysql -uroot -p -h192.168.133.131 -P3306
兩臺主數(shù)據(jù)庫查詢服務ID及Master狀態(tài)
# 登錄 mysql -uroot -p # 查詢server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可設置臨時ID(重啟失效) # 主數(shù)據(jù)庫1 set global server_id = 1; # 主數(shù)據(jù)庫2 set global server_id = 3; # 查詢Master狀態(tài),并記錄 File 和 Position 的值 show master status; # 注意:執(zhí)行完此步驟后退出主數(shù)據(jù)庫,防止再次操作導致 File 和 Position 的值發(fā)生變化
從數(shù)據(jù)庫1中設置主數(shù)據(jù)庫1
# 登錄 mysql -uroot -p # 查詢server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可設置臨時ID(重啟失效) set global server_id = 2; # 設置主數(shù)據(jù)庫參數(shù) change master to master_host='192.168.133.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000003',master_log_pos=156; # 開始同步 start slave; # 若出現(xiàn)錯誤,則停止同步,重置后再次啟動 stop slave; reset slave; start slave; # 查詢Slave狀態(tài) show slave status\G # 查看是否配置成功 # 查看參數(shù) Slave_IO_Running 和 Slave_SQL_Running 是否都為yes,則證明配置成功。若為no,則需要查看對應的 Last_IO_Error 或 Last_SQL_Error 的異常值。
從數(shù)據(jù)庫2中設置主數(shù)據(jù)庫2
# 登錄 mysql -uroot -p # 查詢server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可設置臨時ID(重啟失效) set global server_id = 4; # 設置主數(shù)據(jù)參數(shù) change master to master_host='192.168.133.131',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=156; # 開始同步 start slave; # 若出現(xiàn)錯誤,則停止同步,重置后再次啟動 stop slave; reset slave; start slave; # 查詢Slave狀態(tài) show slave status\G # 查看是否配置成功 # 查看參數(shù) Slave_IO_Running 和 Slave_SQL_Running 是否都為yes,則證明配置成功。若為no,則需要查看對應的 Last_IO_Error 或 Last_SQL_Error 的異常值。
主數(shù)據(jù)庫1中設置主數(shù)據(jù)庫2
# 登錄 mysql -uroot -p # 設置主數(shù)據(jù)庫參數(shù) change master to master_host='192.168.133.131',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=156; # 開始同步 start slave; # 若出現(xiàn)錯誤,則停止同步,重置后再次啟動 stop slave; reset slave; start slave; # 查詢Slave狀態(tài) show slave status\G # 查看是否配置成功 # 查看參數(shù) Slave_IO_Running 和 Slave_SQL_Running 是否都為yes,則證明配置成功。若為no,則需要查看對應的 Last_IO_Error 或 Last_SQL_Error 的異常值。
主數(shù)據(jù)庫2中設置主數(shù)據(jù)庫1
# 登錄 mysql -uroot -p # 設置主數(shù)據(jù)庫參數(shù) change master to master_host='192.168.133.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000003',master_log_pos=156; # 開始同步 start slave; # 若出現(xiàn)錯誤,則停止同步,重置后再次啟動 stop slave; reset slave; start slave; # 查詢Slave狀態(tài) show slave status\G # 查看是否配置成功 # 查看參數(shù) Slave_IO_Running 和 Slave_SQL_Running 是否都為yes,則證明配置成功。若為no,則需要查看對應的 Last_IO_Error 或 Last_SQL_Error 的異常值。
測試
通過工具連接雙主雙從數(shù)據(jù)庫或者在服務器連接。
注意:主數(shù)據(jù)庫的配置文件中配置了需要同步的數(shù)據(jù)庫,因此只會同步配置的數(shù)據(jù)庫,不配置則同步全部。
# 在主數(shù)據(jù)庫1創(chuàng)建數(shù)據(jù)庫test create database test; # 其他三個數(shù)據(jù)庫查看 show databases; # 在主數(shù)據(jù)庫1創(chuàng)建表 use test; create table t_user(id int, name varchar(20)); # 插入數(shù)據(jù) insert into t_user values(1, 'C3Stones'); # 其他三個數(shù)據(jù)庫查看 use test; select * from t_user; # 其他刪改查操作請自行測試
到此這篇關于Linux安裝Mysql8.0.20并配置主從復制(一主一從,雙主雙從) 的文章就介紹到這了,更多相關Mysql8.0.20安裝并配置主從復制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何利用MySQL查詢varbinary中存儲的數(shù)據(jù)
varbinary 類型和char與varchar類型是相似的,他們是包含字節(jié)流而不是字符流,他們有二進制字符的集合和順序,他們的對比,排序是基于字節(jié)的數(shù)值進行的,本文給大家介紹如何利用MySQL查詢varbinary中存儲的數(shù)據(jù),感興趣的朋友一起看看吧2023-07-07MySQL數(shù)據(jù)庫主從復制延時超長的解決方法
這篇文章主要給大家介紹了關于MySQL數(shù)據(jù)庫主從復制延時超長的解決方法,文中通過示例代碼介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-06-06Mysql數(shù)據(jù)庫慢查詢常用優(yōu)化方式
數(shù)據(jù)庫SQL優(yōu)化是老生常談的問題,下面這篇文章主要給大家介紹了關于Mysql數(shù)據(jù)庫慢查詢常用優(yōu)化方式,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-05-05