久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MYSQL主從和ATLAS讀寫分離的搭建

164次閱讀
沒有評論

共計 11649 個字符,預計需要花費 30 分鐘才能閱讀完成。

本篇內容介紹了“MYSQL 主從和 ATLAS 讀寫分離的搭建”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、環境準備

操作系統 CENTOS 7.5

數據庫 MYSQL5.6.40

ATLAS2.2.1

IP 地址

主庫 192.168.56.118

備庫 192.168.56.119

ATLAS  中間件 192.168.56.117

我這里只寫的是普通的讀寫分離搭建,沒有那些 share 分表之類的那么多復雜的,以后有時間了再搞~_~

MYSQL 主從搭建,這個,其實可以直接去看我寫的一篇 MYSQL 主從和主主的文章

http://blog.itpub.net/28371090/viewspace-2154828/

已經很詳細了,下面再寫一遍,只是想要更簡潔一些。

MYSQL5.6.40 下載地址(源碼包)

https://downloads.mysql.com/archives/get/file/mysql-5.6.40.tar.gz

ATLAS2.2.1 下載地址

https://github.com/Qihoo360/Atlas/releases/tag/2.2.1

兩臺服務器一樣的安裝方式

二、MYSQL 源碼安裝

使用本地 yum 源

[520]  
name=520  
baseurl=file:///mnt/cdrom  
gpgcheck=0  
enabled=1

1、安裝依賴
yum -y install make gcc-c++ cmake bison-devel  ncurses-devel perl
2、創建用戶和組  
groupadd mysql
useradd mysql -g mysql -M -s /sbin/nologin 

3、解壓 tar -zxvf mysql-5.6.40.tar.gz

cd /opt/

tar -zxvf mysql-5.6.40.tar.gz -C /opt/

cd /opt/mysql-5.6.40

mkdir /data/mysql5.6.40/

4、編譯安裝
cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql-5.6.40/ -DMYSQL_DATADIR=/data/mysql5.6.40/ -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysqld.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

5、編譯

make make install

6、目錄授權
chown mysql.mysql  /data/mysql5.6.40/
mkdir  /data/mysql5.6.40/log
chown mysql.mysql  /data/mysql5.6.40/log
7、數據庫初始化
cd  /opt/mysql-5.6.40/
./scripts/mysql_install_db –user=mysql –datadir=/data/mysql5.6.40/
8、配置環境變量
vi /root/.bash_profile 在最后一行添加
PATH=$PATH:$HOME/bin:/data/mysql5.6.40/bin:/data/mysql5.6.40/lib

三、MYSQL5.6.40 主從搭建

1、Master 端配置部署 a、在主服務器上的 my.cnf 配置文件中的 [mysqld] 節點下添加以下配置

vi /etc/my.cnf 

[mysqld] 

server-id=101

default-storage-engine=InnoDB

lower_case_table_names=1

log-bin=/data/mysql5.6.40/log/mysql-bin.log

log-bin-index=/data/mysql5.6.40/log/mysql-bin.index

expire_logs_days=30

datadir=/data/mysql5.6.40/

socket=/tmp/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

#log-error=/data/mysql5.6.40/mysqld.log

#pid-file=/data/mysql5.6.40/mysqld.pid

這里有遇到啟動不了的情況就注釋掉

啟動數據庫  
傳統啟動方式
/usr/local/mysql/bin/mysqld_safe –user=mysql
制作成服務啟動
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
查看啟動是否成功
netstat -tnl|grep 3306
ps -ef|grep mysql
相關命令
service mysql start
停止 mysql 服務
service mysql stop
重啟 mysql 服務
service mysql restart 
添加到開機啟動項
chkconfig –add mysql

b、創建用戶,并賦予權限:

登陸數據庫時報錯
ERROR 2002 (HY000): Can t connect to local MySQL server through socket /tmp/mysqld.sock (2)

ln -s /tmp/mysql.sock  /tmp/mysqld.sock

登陸
mysql -uroot

create user repl_user;

GRANT REPLICATION SLAVE ON *.* TO repl @ % IDENTIFIED BY PASSWORD ******

設置密碼時會遇到報錯:

ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number

解決辦法:用 select password(你想輸入的密碼 查詢出你的密碼對應的字符串

select password(123456

查出的是 *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

GRANT REPLICATION SLAVE ON *.* TO repl_user @ % IDENTIFIED BY PASSWORD *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9

2、Slave 端配置部署

vi /etc/my.cnf 

[mysqld] 

server-id=102

default-storage-engine=InnoDB

lower_case_table_names=1

log-bin=/data/mysql5.6.40/log/mysql-bin.log

log-bin-index=/data/mysql5.6.40/log/mysql-bin.index

expire_logs_days=30

datadir=/data/mysql5.6.40/

socket=/tmp/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

#log-error=/data/mysql5.6.40/mysqld.log

#pid-file=/data/mysql5.6.40/mysqld.pid

3、建立主從同步

由于我這里是新搭建的庫,直接創建即可,不需要搞什么備份導入

主庫:

登錄 mysql

show master status;

記住 file 和 position

mysql show master status;
+——————+———-+————–+——————+——————-+
| File  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000002 |  120 |  |  |  |
+——————+———-+————–+——————+——————-+
1 row in set (0.00 sec)

從庫:

登錄 mysql

change master to

master_host= 192.168.56.118 ,

master_port=3306,

master_user= repl_user ,

master_password= 123456 ,

master_log_file= mysql-bin.000002 ,

master_log_pos=120;

配置成功后,啟動 slave

start slave;

驗證主從是否搭建成功在從庫執行

show slave status \G;

看到兩個 YES 就 OK

 Slave_IO_Running: Yes

Slave_SQL_Running: Yes

在主庫創建一個表

use test
create table aa (name char(10));
insert into aa values(Tom
在從庫查詢
use test
select * from aa;
查到剛剛插入的數據就 O 了

mysql  use mysql;
mysql  desc user;
mysql  GRANT ALL PRIVILEGES ON *.* TO root@ %  IDENTIFIED BY  root  // 授權遠程連接
mysql  update user set Password = password(123456) where User= root  // 設置 root 用戶密碼
mysql  select Host,User,Password from user where User= root
mysql  flush privileges;
mysql  exit

四、報錯問題處理:

MYSQL 啟動報錯

(1)

報錯現象:

[root@node1 mysql]# service mysql start

Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/mysql/node1.pid).

查看報錯日志:

[root@node1 mysql]# tail  /var/log/mysqld.log 

190512 19:59:10  InnoDB: Starting an apply batch of log records to the database…

InnoDB: Progress in percents: 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 

InnoDB: Apply batch completed

190512 19:59:10  InnoDB: Waiting for the background threads to start

190512 19:59:11 InnoDB: 5.5.40 started; log sequence number 1595675

190512 19:59:11 [Note] Server hostname (bind-address): 0.0.0.0 port: 3306

190512 19:59:11 [Note]   – 0.0.0.0 resolves to 0.0.0.0

190512 19:59:11 [Note] Server socket created on IP: 0.0.0.0 .

190512 19:59:11 [ERROR] Fatal error: Can t open and lock privilege tables: Table mysql.host doesn t exist

190512 19:59:11 mysqld_safe mysqld from pid file /var/lib/mysql/node1.pid ended

解決方法:

查看配置文件,發現配置文件中 datadir 目錄是默認的,需要修改成自己設置的 /usr/local/mysql/data/

[root@node1 mysql]# cat /etc/my.cnf 

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

[root@node1 mysql]# vi /etc/my.cnf 

datadir=/usr/local/mysql/data/

修改完成后重新啟動 MYSQL 成功

[root@node1 mysql]# service mysql start

Starting MySQL.. SUCCESS! 

(2)

報錯現象:

[root@node1 mysql]# /usr/local/mysql/bin/mysql -uroot

ERROR 2002 (HY000): Can t connect to local MySQL server through socket /tmp/mysql.sock (2)

查看配置文件發現 socket 文件在 /var/lib/mysql/mysql.sock,而不是在 /tmp/mysql.sock

[root@node1 mysql]# cat /etc/my.cnf 

[mysqld]

datadir=/usr/local/mysql/data/

socket=/var/lib/mysql/mysql.sock

user=mysql

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

解決方法:
設置軟鏈接

ln -s /var/lib/mysql/mysql.sock  /tmp/mysql.sock

或者,修改配置文件

注意一個問題,在生產環境,要注意時區問題

vi /etc/my.cnf

[mysqld]

default-time_zone = +8:00

使用北京時間的時區

注意事項:
mysql 異常宕機情況下,如果未設置 sync_binlog= 1 或者 innodb_flush_log_at_trx_commit= 1 很有可能出現 binlog 或者 relaylog 文件出現損壞,導致主從不一致。

五、ATLAS 讀寫分離配置

ATLAS2.2.1 下載地址

https://github.com/Qihoo360/Atlas/releases/tag/2.2.1

Atlas-2.2.1.el6.x86_64.rpm

rpm -ivh Atlas-2.2.1.el6.x86_64.rpm

安裝完成后,它會默認在”/usr/local/mysql-proxy”目錄下生成 4 個文件夾,以及需要配置的文件,如下:

[root@localhost ~]# ll /usr/local/mysql-proxy/
total 4
drwxr-xr-x. 2 root root  75 Jul 30 14:27 bin
drwxr-xr-x. 2 root root  22 Jul 30 16:35 conf
drwxr-xr-x. 3 root root 4096 Jul 30 14:27 lib
drwxr-xr-x. 2 root root  38 Jul 30 16:35 log

bin 目錄下放的都是可執行文件

1.“encrypt”是用來生成 MySQL 密碼加密的,在配置的時候會用到

2.“mysql-proxy”是 MySQL 自己的讀寫分離代理

3.“mysql-proxyd”是 360 弄出來的,后面有個“d”,服務的啟動、重啟、停止。都是用他來執行的

conf 目錄下放的是配置文件

1.“test.cnf”只有一個文件,用來配置代理的,可以使用 vim 來編輯

lib 目錄下放的是一些包,以及 Atlas 的依賴

log 目錄下放的是日志,如報錯等錯誤信息的記錄

進入 bin 目錄,使用 encrypt 來對數據庫的密碼進行加密,我的 MySQL 數據的用戶名是 buck,密碼是 hello,我需要對密碼進行加密

[root@localhost bin]# ./encrypt hello
RePBqJ+5gI4=

配置 Atlas,使用 vim 進行編輯

[root@localhost conf]# cd /usr/local/mysql-proxy/conf/
[root@localhost conf]# vim test.cnf

這是用來登錄到 Atlas 的管理員的賬號與密碼,與之對應的是“#Atlas 監聽的管理接口 IP 和端口”,也就是說需要設置管理員登錄的端口,才能進入管理員界面,默認端口是 2345,也可以指定 IP 登錄,指定 IP 后,其他的 IP 無法訪問管理員的命令界面。方便測試,我這里沒有指定 IP 和端口登錄。

# 管理接口的用戶名
admin-username = user

# 管理接口的密碼
admin-password = pwd

這里的管理接口用戶名和密碼也用的是默認的

這是用來配置主數據的地址與從數據庫的地址,這里配置的主數據庫是 118,從數據庫是 119

#Atlas 后端連接的 MySQL 主庫的 IP 和端口,可設置多項,用逗號分隔
proxy-backend-addresses = 192.168.56.118:3306

#Atlas 后端連接的 MySQL 從庫的 IP 和端口,@后面的數字代表權重,用來作負載均衡,若省略則默認為 1,可設置多項,用逗號分隔
proxy-read-

這個是用來配置 MySQL 的賬戶與密碼的,我的 MySQL 的用戶是 buck, 密碼是 hello, 剛剛使用 Atlas 提供的工具生成了對應的加密密碼

# 用戶名與其對應的加密過的 MySQL 密碼,密碼使用 PREFIX/bin 目錄下的加密程序 encrypt 加密,下行的 user1 和 user2 為示例,將其替換為你的 MySQL 的用戶名和加密密碼!pwds = buck:RePBqJ+5gI4=

(RePBqJ+5gI4= 這個就是前面自己加密過的密碼,填上去)

這是設置工作接口與管理接口的,如果 ip 設置的”0.0.0.0”就是說任意 IP 都可以訪問這個接口,當然也可以指定 IP 和端口,方便測試我這邊沒有指定,工作接口的用戶名密碼與 MySQL 的賬戶對應的,管理員的用戶密碼與上面配置的管理員的用戶密碼對應。

#Atlas 監聽的工作接口 IP 和端口
proxy-address = 0.0.0.0:1234
#Atlas 監聽的管理接口 IP 和端口
admin-address = 0.0.0.0:2345

啟動 Atlas

[root@localhost bin]# ./mysql-proxyd test start
OK: MySQL-Proxy of test is started

再 ATLAS 機器上,我是沒有安裝 MYSQL 的。

/etc/init.d/mysqld status  測試下也沒問題,不過對于我來說意義不大,我根本沒安裝

ps -ef |grep mysql

使用如下命令,進入 Atlas 的管理模式“mysql -h227.0.0.1 -P2345 -uuser -ppwd ”,能進去說明 Atlas 正常運行著呢,因為它會把自己當成一個 MySQL 數據庫,所以在不需要數據庫環境的情況下,也可以進入到 MySQL 數據庫模式。

[root@localhost bin]# mysql -h227.0.0.1 -P2345 -uuser -ppwd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.99-agent-admin

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type help; or \h for help. Type \c to clear the current input statement.

mysql

可以訪問“help”表,來看 MySQL 管理員模式都能做些什么。可以使用 SQL 語句來訪問

mysql select * from help;
+—————————-+———————————————————+
| command  | description  |
+—————————-+———————————————————+
| SELECT * FROM help  | shows this help  |
| SELECT * FROM backends  | lists the backends and their state  |
| SET OFFLINE $backend_id  | offline backend server, $backend_id is backend_ndx s id |
| SET ONLINE $backend_id  | online backend server, …  |
| ADD MASTER $backend  | example: add master 127.0.0.1:3306 , …  |
| ADD SLAVE $backend  | example: add slave 127.0.0.1:3306 , …  |
| REMOVE BACKEND $backend_id | example: remove backend 1 , …  |
| SELECT * FROM clients  | lists the clients  |
| ADD CLIENT $client  | example: add client 192.168.1.2 , …  |
| REMOVE CLIENT $client  | example: remove client 192.168.1.2 , …  |
| SELECT * FROM pwds  | lists the pwds  |
| ADD PWD $pwd  | example: add pwd user:raw_password , …  |
| ADD ENPWD $pwd  | example: add enpwd user:encrypted_password , …  |
| REMOVE PWD $pwd  | example: remove pwd user , …  |
| SAVE CONFIG  | save the backends to config file  |
| SELECT VERSION  | display the version of Atlas  |
+—————————-+———————————————————+
16 rows in set (0.00 sec)

mysql

也可以使用工作接口來訪問,使用命令“mysql -h227.0.0.1 -P1234 -ubuck -phello”

[root@localhost bin]# mysql -h227.0.0.1 -P1234 -ubuck -phello
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.81-log
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type  help;  or  \h  for help. Type  \c  to clear the current input statement.
mysql

如果工作接口可以進入了,就可以在 Windows 平臺下,使用 Navicat 來連接數據庫,填寫對應的 host,Port,用戶名,密碼就可以

4. 讀寫分離測試

這里測試讀寫分離需要使用到 Jmeter 了,它是 Java 寫第一套開源的壓力測試工具,因為這個比較方便。他有專門測試 MySQL 的模塊,需要使用 MySQL 的 JDBC 驅動 jar 包,配置很簡單,東西很好很強大很好用。

Jmeter 下載地址:

https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.zip

MySQL 的 JDBC 包  :

https://cdn.mysql.com//archives/mysql-connector-java-5.1/mysql-connector-java-5.1.44.zip

JAVA8

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下載后,分別都解壓開來,打開 Jmeter (在 bin 目錄下有個 jmeter.bat,雙擊它前,你的機器需要先安裝 JAVA8,只有這樣才可以運行),在測試計劃中,導入 JDBC 的 jar 包

配置 JDBC 的驅動,如下圖

名稱可以隨意填,URL、賬密這些按之前設置的來即可,如下圖

jdbc:mysql://192.168.56.117:1234/test
hello

配置完成后,進行測試

先創建一個組

添加測試的 JDBC REQUEST

先整一個查詢的測試

點擊執行之后,去服務器上面的主備庫觀察數據傳輸情況

sar -n DEV 1 10000  用這條命令

或者 iostat 也可以

主庫:(明顯是沒有數據傳輸(幾乎沒讀寫))

備庫:(明顯紅色框框看到有數據傳輸)

由此可見,數據讀是從備庫讀取的。

寫入數據也是一樣

在主庫

create database test;

create table sbtest (name varchar(9));

insert into sbtest values (Tom

insert into sbtest as select * from sbtest;

不停執行以下語句的循環插入

insert into sbtest as select * from sbtest;

有個上百萬行,可以開始測試了。

“MYSQL 主從和 ATLAS 讀寫分離的搭建”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計11649字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 安达市| 土默特左旗| 彩票| 德钦县| 广水市| 泗阳县| 沁阳市| 阜城县| 枣强县| 韶关市| 繁峙县| 商南县| 华安县| 错那县| 运城市| 仪陇县| 丰镇市| 宁国市| 雷波县| 城市| 金溪县| 百色市| 奇台县| 垣曲县| 搜索| 轮台县| 晴隆县| 洱源县| 宣威市| 邛崃市| 沐川县| 梁山县| 平和县| 乌兰浩特市| 罗源县| 井陉县| 白银市| 慈利县| 绥芬河市| 寻甸| 尤溪县|