Giới thiệu về Proxy MySQL. Tạp chí cơ sở dữ liệu

Giới thiệu

một proxy
là người xử lý các vấn đề pháp lý thay cho người khác
Một web-proxy có thể ẩn danh thông qua công nghệ, làm cho trình duyệt web của bạn xuất hiện
Proxy cũng được sử dụng để lưu trữ nội dung dự định đến từ vị trí proxy của bạn
chuyển thông tin từ trình duyệt máy khách sang máy chủ web thực lưu trữ dữ liệu

Được
Xem xét tất cả những điều đó, không có gì đáng ngạc nhiên khi ý tưởng về một người đại diện có
Proxy MySQL, được tạo bởi Jan Kneschke, đứng giữa ứng dụng của bạn và đấu trường cơ sở dữ liệu
và cơ sở dữ liệu MySQL của bạn. Chẳng hạn, một khi mysql của bạn
bạn tự động kết nối với cổng 3306 khi sử dụng
kết nối máy khách của bạn với cổng 4040, daemon mysql-proxy và tất cả các truy vấn SQL
Khi các truy vấn đó chuyển tiếp, trước tiên chúng tôi chuyển chúng qua proxy
Chúng tôi có thể tính thời gian cho các truy vấn đó hoặc chuyển hướng các truy vấn đó và thực hiện nhiều điều hữu ích
Ngoài ra, chúng tôi có thể viết lại chúng ở một số nơi khác. Hơn nữa
Sau đó, chúng ta sẽ nói về tất cả các ứng dụng của công nghệ này

cài đặt

a. Tải xuống
nhị phân

Các
Điều đầu tiên bạn phải làm là có được một bản sao của phần mềm
Lấy một bản phân phối nhị phân nếu bạn không cần xây dựng từ nguồn
và khởi chạy nó từ thư mục đã cài đặt cho nền tảng của bạn
vì phần mềm này vẫn ở dạng alpha, tôi khuyên bạn nên cài đặt phần mềm này trên toàn bộ hệ thống
đây là trang tải xuống tại thời điểm viết bài

http. // nhà phát triển. mysql. com/tải xuống/mysql-proxy/index. html

b
bắt đầu mysql-proxy

rùng mình
Đưa ra các hướng dẫn sau cho daemon

_10

c
kết nối với máy khách mysql

bây giờ cháy
Đảm bảo chỉ định cổng khi khởi động ứng dụng khách mysql tiêu chuẩn của bạn để bạn không
kết nối trực tiếp với máy chủ MySQL

________Đầu tiên

cái gì
xảy ra ở đây?
Thay vì hướng dẫn ứng dụng khách MySQL của chúng tôi kết nối với một
Thay vào đó, chúng tôi đang hướng dẫn máy chủ cơ sở dữ liệu mysqld kết nối thông qua proxy
Đổi lại, proxy sẽ thay mặt chúng tôi thiết lập kết nối với máy chủ cơ sở dữ liệu
lưu lượng truy cập sẽ được khách hàng của chúng tôi gửi đến máy chủ cơ sở dữ liệu để xử lý là
thay vì thông qua proxy của chúng tôi, cho phép proxy của chúng tôi thao túng điều đó
luồng lưu lượng truy cập và thay đổi nó theo những cách khác nhau

ví dụ

hiểu biết
Chìa khóa để sửa đổi mysql-proxy là viết tập lệnh lua
Mặc dù là một ngôn ngữ lập trình hơi khó hiểu, nhưng nó rất nhẹ
và kích thước nhỏ làm cho nó trở nên lý tưởng cho một cuộc tấn công trung gian với tác động tối thiểu
Các bản phân phối bao gồm một số công cụ, bao gồm MySQL-proxy
Dưới đây là một số ví dụ về tập lệnh lua để bạn thực hành
Ví dụ của Giuseppe Maxia, hiển thị các móc khác nhau mà bạn có thể sử dụng trong
nhiều công việc của Giuseppe có thể được tìm thấy ở đây

http. //làm giả. mysql. com/công cụ/công cụ. php?id=109


— all-hooks.lua
local access_ndx = 0
function read_auth( auth )
print_access (‘inside read_auth ‘)
end
function connect_server()
print_access (‘inside connect_server’)
end
function read_handshake( auth )
print_access (‘inside read_handshake’ )
end
function read_auth_result( auth )
print_access (‘inside read_auth_result’)
end
function disconnect_client()
print_access(‘inside disconnect_client’)
end
function read_query (packet)
print_access(‘inside read_query t’ . packet:sub(2))
proxy.queries:append(1, packet)
return proxy.PROXY_SEND_QUERY
end
function read_query_result (inj)
print_access(‘inside read_query_result t’ . inj.query)
end
function print_access(msg)
access_ndx = access_ndx + 1
print( string.format(‘%3d %-30s’,access_ndx,msg))
end

bạn sẽ
tương tự như vậy, hãy khám phá blog của Giuseppe để có vô số kiến ​​​​thức

http. // bộ dữ liệu. blogspot. com/

Đây là
khác từ Jan Kneschke, người tạo ra mysql-proxy

http. //làm giả. mysql. com/công cụ/công cụ. php?id=76

Đây
ghi lại từng truy vấn trong một tệp có tên myquery. đăng nhập


local log_file = ‘query.log’
local fh = io.open(log_file, “a+”)
function read_query( packet )
if string.byte(packet) == proxy.COM_QUERY then
local query = string.sub(packet, 2)
fh:write( string.format(“%s %6d — %s n”,
os.date(‘%Y-%m-%d %H:%M:%S’),
proxy.connection[”thread_id”],
query))
fh:flush()
end
end

bạn sẽ
đồng thời phát hiện ra rằng blog của Jan có rất nhiều chi tiết hữu ích

http. //tháng một. kneschke. de/

Các ứng dụng

Ở đó
Có rất nhiều ứng dụng cho công nghệ này và khi bạn bắt đầu,
ý tưởng chắc chắn sẽ tràn ngập tâm trí của bạn. Ví dụ, MySQL của
Nhật ký truy vấn chậm trên máy chủ chỉ cung cấp mức độ chi tiết xuống còn một giây
bạn sẽ cần thêm các bản vá của Google để có quyền kiểm soát micro giây
nó, yêu cầu biên dịch lại nguồn MySQL
Các quản trị viên sẽ chống lại, đó là lúc MySQL-Proxy xuất hiện
Bạn có thể nhận được mức độ chi tiết thứ hai và tập lệnh lua để làm điều đó
Điều tuyệt vời về nó là bạn có thể cài đặt nó trên một
mà không thực hiện bất kỳ thay đổi đáng kể nào, hệ điều hành
Bạn sẽ hướng nó đến cổng 4040 của proxy bằng cách trỏ nó đến cổng 3306
mà không thực hiện bất kỳ thay đổi nào đối với mã ứng dụng?
Chạy proxy trên cổng và khởi động lại mysql trên một cổng khác
3306 Tuy nhiên, sử dụng iptables của Linux để định tuyến lại lưu lượng thậm chí còn tốt hơn
tất cả các kết nối đến trên cổng 3306;
đoạn trích để làm điều đó

http. //làm giả. mysql. com/công cụ/công cụ. php?id=82


về cân bằng tải?
Các truy vấn CHỌN sau đó được gửi đến máy chủ chính của bạn để thực hiện các thao tác CẬP NHẬT hoặc XÓA
được chuyển hướng đến các bản sao nô lệ khác nhau của máy chủ sản xuất
phù hợp với hóa đơn là tốt ở đây

Sự kết luận

Mặc dù
Mặc dù MySQL Proxy vẫn đang trong giai đoạn phát triển alpha nhưng tiềm năng của nó
Tính sẵn có của các ứng dụng đã tăng mức độ phổ biến của nó
Có nhiều ứng dụng cho phép minh bạch giữa ứng dụng và cơ sở dữ liệu của nó
tính sẵn sàng cao, tải và khắc phục sự cố, trong số những thứ khác
Ngoài ra, vì nó trong suốt và nằm ở giữa nên nó có thể cân bằng và
được đưa vào sử dụng một cách dễ dàng và nhanh chóng vì nó có thể được gỡ bỏ khỏi
Khi công nghệ này phát triển, chắc chắn nó sẽ trở thành một dịch vụ
một vũ khí trong hộp công cụ thủ thuật cơ sở dữ liệu mã nguồn mở của bạn

»
Xem tất cả các bài viết của chuyên mục Sean Hull

Giới thiệu

một proxy
là người thực hiện nghĩa vụ pháp lý thay cho người khác. Trong
công nghệ, một web-proxy có thể ẩn danh, làm cho việc lướt web của bạn xuất hiện
bắt nguồn từ vị trí proxy của bạn. Proxy cũng được sử dụng để lưu trữ
dữ liệu giữa trình duyệt máy khách và máy chủ web lưu trữ dữ liệu thực tế.  

Được
tất cả những điều đó, không có gì ngạc nhiên khi khái niệm proxy đã được đưa vào
đấu trường cơ sở dữ liệu. Proxy MySQL, của Jan Kneschke nằm giữa ứng dụng của bạn
và cơ sở dữ liệu MySQL của bạn. Ví dụ, khi bạn kích hoạt mysql của mình
máy khách, theo mặc định, bạn kết nối với cổng 3306. Bằng cách khởi động
mysql-proxy daemon, sau đó kết nối ứng dụng khách của bạn với 4040, tất cả các truy vấn SQL
sẽ chuyển qua proxy trước. Khi các truy vấn đó chuyển tiếp, chúng tôi
có thể làm rất nhiều điều hữu ích. Chúng tôi có thể tính thời gian cho các truy vấn đó hoặc chuyển hướng
họ ở một nơi khác. Hoặc chúng ta có thể viết lại chúng theo một cách nào đó. Hơn nữa
tiếp, chúng ta sẽ thảo luận về vô số ứng dụng của công nghệ này

cài đặt

a. Tải xuống
nhị phân

Các
điều đầu tiên bạn cần làm là lấy một bản sao của phần mềm. Bạn
có thể xây dựng từ nguồn, nhưng bạn không cần. Lấy một bản phân phối nhị phân
cho nền tảng của bạn và kích hoạt nó từ thư mục đã cài đặt. chúng tôi không
khuyên bạn nên cài đặt nó trên toàn hệ thống, vì phần mềm này vẫn đang ở giai đoạn alpha
thời điểm viết bài này. Đây là trang tải xuống

http. // nhà phát triển. mysql. com/tải xuống/mysql-proxy/index. html

b
bắt đầu mysql-proxy

Chạy
daemon, đưa ra lệnh sau

$ sbin/mysql-proxy --proxy-lua-script=share/tutorial-basic.lua &

c
kết nối với máy khách mysql

bây giờ cháy
lên ứng dụng khách mysql thông thường của bạn. Đảm bảo chỉ định cổng, để bạn không
kết nối trực tiếp với máy chủ mysql

$ mysql --host=localhost --port=4040 -u root -p

Cái gì
xảy ra ở đây?
người trung gian. Thay vì bảo ứng dụng khách mysql của chúng tôi kết nối với một
máy chủ cơ sở dữ liệu mysql, thay vào đó chúng tôi yêu cầu nó kết nối với proxy.  
Đến lượt proxy sẽ kết nối với máy chủ cơ sở dữ liệu cho chúng ta. Vì vậy, tất cả
lưu lượng truy cập mà khách hàng của chúng tôi đã gửi đến máy chủ cơ sở dữ liệu để thực thi, được
thay vào đó được thông qua là proxy. Vì vậy, proxy của chúng tôi có thể chơi với điều đó
luồng lưu lượng truy cập và thao tác với nó theo nhiều cách khác nhau.  

ví dụ

hiểu biết
và viết tập lệnh lua là chìa khóa để tùy chỉnh mysql-proxy.  
Mặc dù nó có thể là một ngôn ngữ lập trình ít người biết đến, nhưng trọng lượng nhẹ của nó
và bản chất nhỏ gọn làm cho nó hoàn hảo cho một người trung gian tác động thấp
công nghệ như MySQL-proxy. Các bản phân phối đi kèm với một số
tập lệnh lua ví dụ để bạn mài răng. Đây là một cái khác
ví dụ từ Giuseppe Maxia in ra các móc khác nhau mà bạn có thể sử dụng trong
kịch bản của bạn. Bạn có thể tìm thêm từ Giuseppe tại đây

http. //làm giả. mysql. com/công cụ/công cụ. php?id=109


— all-hooks.lua
local access_ndx = 0
function read_auth( auth )
print_access (‘inside read_auth ‘)
end
function connect_server()
print_access (‘inside connect_server’)
end
function read_handshake( auth )
print_access (‘inside read_handshake’ )
end
function read_auth_result( auth )
print_access (‘inside read_auth_result’)
end
function disconnect_client()
print_access(‘inside disconnect_client’)
end
function read_query (packet)
print_access(‘inside read_query t’ . packet:sub(2))
proxy.queries:append(1, packet)
return proxy.PROXY_SEND_QUERY
end
function read_query_result (inj)
print_access(‘inside read_query_result t’ . inj.query)
end
function print_access(msg)
access_ndx = access_ndx + 1
print( string.format(‘%3d %-30s’,access_ndx,msg))
end

bạn sẽ
cũng thấy blog của Giuseppe chứa đầy thông tin hữu ích

http. // bộ dữ liệu. blogspot. com/

Đây là
khác từ tác giả của mysql-proxy, Jan Kneschke.  

http. //làm giả. mysql. com/công cụ/công cụ. php?id=76

Đây
ghi nhật ký tất cả các truy vấn vào một tệp myquery. đăng nhập


local log_file = ‘query.log’
local fh = io.open(log_file, “a+”)
function read_query( packet )
if string.byte(packet) == proxy.COM_QUERY then
local query = string.sub(packet, 2)
fh:write( string.format(“%s %6d — %s n”,
os.date(‘%Y-%m-%d %H:%M:%S’),
proxy.connection[”thread_id”],
query))
fh:flush()
end
end

bạn sẽ
cũng thấy blog của Jan cũng có đầy đủ thông tin hữu ích

http. //tháng một. kneschke. de/

Các ứng dụng

Ở đó
có rất nhiều ứng dụng cho công nghệ này và khi bạn bắt đầu tìm hiểu,
tâm trí chắc chắn sẽ chạy điên cuồng với những ý tưởng. Chẳng hạn, MySQL mặc định
nhật ký truy vấn chậm của máy chủ chỉ cung cấp mức độ chi tiết thứ hai. nếu bạn
muốn kiểm soát micro giây, bạn sẽ phải thêm các bản vá của Google để nhận
nó. Điều đó yêu cầu biên dịch lại nguồn MySQL, mà nhiều
quản trị viên sẽ chống lại. Nhập MySQL-Proxy, đi kèm với một
tập lệnh lua để làm điều đó. Bạn có thể nhận được mức độ chi tiết thứ hai và
đăng nhập truy vấn cho phù hợp. Điều tuyệt vời là bạn có thể cài đặt nó trên một
hệ thống đang chạy, không có bất kỳ thay đổi lớn nào. Thay vì để ứng dụng của bạn kết nối
đến cổng 3306, bạn sẽ trỏ nó đến cổng 4040 của proxy. Nhưng những gì về
mà không thay đổi bất kỳ mã ứng dụng nào?
mysql trên một cổng khác và khởi động lại nó. Sau đó chạy proxy trên cổng
3306. Tuy nhiên, một cách thậm chí còn tốt hơn là bạn dùng iptables của Linux để định tuyến lại
tất cả các kết nối đến trên cổng 3306. Hãy xem liên kết này để biết mã
đoạn trích để làm điều đó

http. //làm giả. mysql. com/công cụ/công cụ. php?id=82


về cân bằng tải?
CẬP NHẬT hoặc XÓA để chuyển đến máy chủ chính của bạn, sau đó CHỌN các truy vấn được
được chuyển hướng đến các bản sao nô lệ khác nhau của máy chủ sản xuất. Proxy MySQL
phù hợp với hóa đơn ở đây quá.  

Sự kết luận

Mặc dù
MySQL Proxy vẫn đang trong giai đoạn phát triển alpha, tiềm năng của nó
các ứng dụng đã xây dựng sự phổ biến của nó. Khả năng ngồi
một cách minh bạch giữa một ứng dụng và cơ sở dữ liệu của nó có rất nhiều ứng dụng,
từ chẩn đoán và khắc phục sự cố đến tính khả dụng và tải cao
thăng bằng. Hơn nữa, vì nó nằm trong suốt ở giữa nên nó có thể
được đưa vào sử dụng một cách nhanh chóng và dễ dàng vì nó có thể được đưa ra khỏi
Dịch vụ. Hãy theo dõi khi công nghệ này trưởng thành, nó chắc chắn sẽ trở thành một
một phần trong kho công cụ và thủ thuật cơ sở dữ liệu mã nguồn mở của bạn

»
Xem tất cả các bài viết của chuyên mục Sean Hull