นักธนู
แพลตฟอร์มการดำเนินงาน SQL อัตโนมัติตามการลงทะเบียนรองรับคำสั่งงานการตรวจสอบงานเวลาอีเมล OSC และฟังก์ชั่นอื่น ๆ นอกจากนี้ยังสามารถกำหนดค่าการสืบค้น MySQL การจัดการแบบสอบถามช้าการจัดการเซสชัน ฯลฯ
สารบัญ
- ฟังก์ชั่นหลัก
- ข้อกำหนดการออกแบบ
- ประสบการณ์ออนไลน์
- ติดตั้ง
- การปรับใช้ Docker
- การติดตั้งด้วยตนเอง
- วิ่ง
- การรวมฟังก์ชั่น
- แบบสอบถามแบบสอบถามออนไลน์และคำถาม desensitization
- การจัดการบันทึกช้า
- เครื่องมือเพิ่มประสิทธิภาพ SQL
- การจัดการ Alibaba Cloud RDS
- ถาม - ตอบ
ภาษาการพัฒนาและสภาพแวดล้อมการแนะนำ
python3.4及以上
django1.8.17
mysql : 5.6及以上
linux : 64位linux操作系统均可
ฟังก์ชั่นหลัก
- การตรวจสอบอัตโนมัติเริ่มต้นการเปิดตัว SQL คำสั่งงานจะถูกส่งและการเริ่มต้นจะได้รับการตรวจสอบโดยอัตโนมัติ หลังจากผ่านการตรวจสอบแล้วผู้สอบบัญชีจะต้องตรวจสอบด้วยตนเอง
- ทบทวนด้วยตนเอง
Inception ตรวจสอบคำสั่งงานโดยอัตโนมัติจะได้รับการตรวจสอบโดยวิศวกร R&D อื่น ๆ หรือผู้จัดการฝ่ายวิจัยและพัฒนา การดำเนินการ DBA จะดำเนินการ SQL
ทำไมเราต้องตรวจสอบด้วยตนเอง?
สิ่งนี้เป็นไปตามการรับรู้กระบวนการของการดำเนินงานออนไลน์ในสาขาการดำเนินงานและการบำรุงรักษา หากวิศวกรต้องการอัปเดต SQL ฐานข้อมูลออนไลน์คุณควรตรวจสอบโดยวิศวกรคนอื่น หลายครั้งที่ DBA ไม่ทราบความหมายทางธุรกิจของ SQL ดังนั้นการตรวจสอบด้วยตนเองจึงเป็นสิ่งที่ดีที่สุดที่จะได้รับการตรวจสอบโดยวิศวกร R&D อื่น ๆ หรือผู้จัดการฝ่ายวิจัยและพัฒนา นี่คือแนวคิดการออกแบบของอาร์เชอร์ - คำสั่งย้อนกลับสามารถแสดงในใบสั่งงานการแสดงข้อมูลย้อนกลับโดยรองรับการส่งคำสั่งงานย้อนกลับแบบคลิกเดียว
- ดำเนินการ SQL เป็นประจำ
คำสั่งงานที่ได้รับอนุมัติจาก DBA สามารถดำเนินการเป็นประจำ เวลาดำเนินการสามารถแก้ไขได้ก่อนการดำเนินการและสามารถยกเลิกได้ตลอดเวลา - การดำเนินการ PT-OSC รองรับการแสดงผลการดำเนินการ PT-OSC และคุณสามารถคลิกเพื่อยกเลิกกระบวนการ PT-OSC
- ไลบรารีการสืบค้น MySQL ตารางและคำหลักเสร็จสมบูรณ์โดยอัตโนมัติข้อ จำกัด การตั้งค่าการสืบค้น, การส่งออกผลลัพธ์แบบสอบถาม, การแสดงโครงสร้างตารางและการแสดงชุดแบบหลายรายการ
- การจัดการการอนุญาตแบบสอบถาม MySQL ขึ้นอยู่กับคำสั่งค้นหาการแยกวิเคราะห์เริ่มต้น การสนับสนุนการสอบถามสนับสนุนการ จำกัด แอปพลิเคชันการตรวจสอบและการจัดการสิทธิ์การสอบถามระดับตารางรองรับการกำหนดค่ากระบวนการตรวจสอบและการตรวจสอบหลายระดับ
- MySQL Query desensitization แบบไดนามิกขึ้นอยู่กับคำสั่งการสืบค้นการแยกวิเคราะห์เริ่มต้นและสามารถบรรลุการ desensitization แบบไดนามิกของข้อมูลที่ละเอียดอ่อนร่วมกับการกำหนดค่าฟิลด์ desensitization และกฎ desensitization (นิพจน์ปกติ)
- การจัดการบันทึกช้าขึ้นอยู่กับ PT_Query_Digest ของ Percona-Toolkit เพื่อวิเคราะห์และจัดเก็บบันทึกที่ช้าและแสดงบนเว็บ
- การแจ้งเตือนทางอีเมลสามารถกำหนดค่าด้วยการแจ้งเตือนอีเมลเพื่อแจ้งแอปพลิเคชันออนไลน์, แอปพลิเคชันที่ได้รับอนุญาต, ผลการตรวจสอบ ฯลฯ และแจ้งการเข้าสู่ระบบที่ผิดปกติ
ข้อกำหนดการออกแบบ
- การออกแบบฐานข้อมูลที่สมเหตุสมผลและข้อกำหนดเป็นสิ่งจำเป็นมากโดยเฉพาะฐานข้อมูล MySQL เคอร์เนลไม่ได้ทรงพลังเท่ากับ Oracle, DB2, SQL Server และฐานข้อมูลอื่น ๆ ต้องใช้การออกแบบที่สมเหตุสมผลเพื่อเล่นเพื่อจุดแข็งของคุณและหลีกเลี่ยงจุดอ่อนของคุณ อุตสาหกรรมอินเทอร์เน็ตมีข้อกำหนดการออกแบบ MySQL เป็นผู้ใหญ่และเขียนขึ้นดังนี้ โปรดขอให้ผู้อ่านฝึกอบรมนักพัฒนาแบ็คเอนด์ทั้งหมดด้วยข้อกำหนดนี้ก่อนที่ บริษัท จะออนไลน์เพื่อใช้ระบบอาร์เชอร์เพื่อให้พวกเขารู้ถึงเหตุผลและทำไม
ดาวน์โหลดลิงค์ https://github.com/jly8866/archer/blob/master/src/docs/mysql_db_design_guide.md
ไฟล์การกำหนดค่าหลัก
- Archer/Archer/settings.py
นำไปใช้ Docker
- Docker Image, Wiki อ้างอิง
- ภาพเริ่มต้น: https://hub.docker.com/r/hhyo/inception
- ภาพอาร์เชอร์: https://hub.docker.com/r/hhyo/archer
- Docker Image Production ขอบคุณ @小彩票线
ขั้นตอนการติดตั้งด้วยตนเอง
- การเตรียมสิ่งแวดล้อม
- การโคลนนิ่งรหัสไปยังท้องถิ่นหรือดาวน์โหลดแพ็คเกจ ZIP
git clone https://github.com/jly8866/archer.git - ติดตั้ง Inception
แกลเลอรี่โครงการ
- ติดตั้ง Python3 หมายเลขเวอร์ชัน> = 3.4 (เนื่องจากคุณต้องการแก้ไขโมดูลอย่างเป็นทางการโปรดใช้ VirtualEnv หรือ VENV เพื่อแยกสภาพแวดล้อมแยกกัน!)
pip3 install virtualenv
virtualenv venv4archer --python=python3.4
- ติดตั้งโมดูลที่เกี่ยวข้อง
source venv4archer/bin/activate
pip3 install -r requirements.txt
- Pymysql โมดูลที่เข้ากันได้ข้อมูลรุ่นข้อมูลใช้ไฟล์ในไดเรกทอรี src/docker/pymysql เพื่อแทนที่/path/to/python3/lib/python3.4/site-packages/pymysql/ ไฟล์ที่เกี่ยวข้อง
เตรียมก่อนเริ่ม
- สร้างตารางฐานข้อมูลของอาร์เชอร์เอง
- แก้ไขข้อมูลที่อยู่ทั้งหมดของ Archer/Archer/Settings.py รวมถึงฐานข้อมูลและชิ้นส่วน inception_xxx
- สร้างตารางฐานข้อมูลของอาร์เชอร์ผ่านโมเดล หากเป็นการอัพเกรดเวอร์ชันที่มีอยู่โปรดใช้สคริปต์การเปลี่ยนแปลงใน SRC/Init_SQL เพื่อเปลี่ยนสาขาฐานข้อมูล V1.1.1 ต้นฉบับ โปรดใช้ v1.1.1-> v2.0.sql เพื่อเปลี่ยนสาขาหลักดั้งเดิม โปรดใช้ Master-> v2.0.sql เพื่อเปลี่ยนการติดตั้งใหม่ โปรดใช้วิธีการต่อไปนี้เพื่อเริ่มต้นด้วยวิธีต่อไปนี้
python3 manage.py makemigrations sql
python3 manage.py migrate
- สร้างผู้ใช้รูทระบบผู้ดูแลระบบ (ผู้ใช้รายนี้สามารถเข้าสู่ระบบ Django เพื่อจัดการรุ่น)
python3 manage.py createsuperuser - มีสองวิธีในการเริ่มต้น
(1) ใช้ Django ในตัว Runserver ในตัวเพื่อเริ่มบริการและขอแนะนำให้ไม่ใช้ในสภาพแวดล้อมการผลิต
bash debug.sh
(2) ใช้ gunicorn+nginx เพื่อเริ่มโมดูลการติดตั้งบริการ pip3 install gunicorn==19.7.1
ตัวอย่างการกำหนดค่า nginx server{
listen 9123; #监听的端口
server_name archer;
proxy_read_timeout 600s; #超时时间与gunicorn超时时间设置一致,主要用于在线查询
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header Host $host:9123; #解决重定向404的问题
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static {
alias /archer/static; #此处指向settings.py配置项STATIC_ROOT目录的绝对路径,用于nginx收集静态资源
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
เริ่ม bash startup.sh - การเข้าถึงอย่างเป็นทางการเพื่อเข้าสู่ระบบด้วยบัญชีผู้ดูแลระบบที่สร้างขึ้นด้านบน
http://XXXX:port/login/
การรวมคุณสมบัติอื่น ๆ
แบบสอบถามออนไลน์
- เปลี่ยนแบบสอบถามเป็นจริงในการตั้งค่า
- ในหน้า [การจัดการข้อมูลพื้นหลัง]-[การกำหนดค่าที่อยู่ไลบรารีของทาส] เพิ่มข้อมูลไลบรารีทาส
- ไปที่ [การจัดการข้อมูลพื้นหลัง]-[การกำหนดค่าเวิร์กโฟลว์] กระบวนการตรวจสอบการกำหนดค่าหน้า
- ผู้ใช้สามารถสอบถามข้อมูลออนไลน์ได้หลังจากสมัครขออนุญาตและผ่านการตรวจสอบ
- หากคุณต้องการใช้ desensitization แบบไดนามิกโปรดเปลี่ยน data_masking_on_off ในการตั้งค่าเป็นจริงและไปที่ [การจัดการข้อมูลแบ็กเอนด์]-[การกำหนดค่า desensitization] เพื่อกำหนดค่ากฎและฟิลด์ desensitization
การจัดการบันทึกช้า
- SlowQuery เปลี่ยนเป็น TRUE ในการตั้งค่า
- ติดตั้ง percona-toolkit (เวอร์ชัน = 3.0.6) โดยใช้ centos เป็นตัวอย่าง
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
yum -y install percona-toolkit.x86_64
- สร้างตารางคอลเลกชันบันทึกช้าไปยังฐานข้อมูล Archer โดยใช้ src/script/mysql_slow_query_review.sql
- ปรับใช้ src/script/analysion_slow_query.sh ไปยังเครื่องตรวจสอบแต่ละเครื่อง โปรดทราบว่า
hostname="${mysql_host}:${mysql_port}" ในสคริปต์สอดคล้องกับข้อมูลการกำหนดค่าของไลบรารีหลักอาร์เชอร์มิฉะนั้นบันทึกที่เกี่ยวข้องจะไม่ถูกกรอง
เครื่องมือเพิ่มประสิทธิภาพ SQLAdvisor
- ติดตั้ง SQLAdvisor ที่อยู่โครงการ
- แก้ไขไฟล์การกำหนดค่า SQLAdvisor ไปยังเส้นทางโปรแกรมเส้นทางจะต้องเสร็จสมบูรณ์เช่น '/opt/sqladvisor/sqladvisor/sqladvisor'
การจัดการ Alibaba Cloud RDS
- แก้ไขไฟล์การกำหนดค่า Aliyun_RDS_MANAGE = TRUE
- ติดตั้งโมดูล
pip3 install aliyun-python-sdk-core==2.3.5
pip3 install aliyun-python-sdk-core-v3==2.5.3
pip3 install aliyun-python-sdk-rds==2.1.1
- ในหน้า [การจัดการข้อมูลแบ็กเอนด์]-[ข้อมูลการรับรอง ALI Cloud] เพิ่มข้อมูล AccessKey ของบัญชี Alibaba Cloud และรีสตาร์ทบริการ
- ในหน้า [การจัดการข้อมูลพื้นหลัง]-[การกำหนดค่า ALI Cloud RDS] เพิ่มข้อมูลอินสแตนซ์เพื่อรับรู้การจัดการกระบวนการและการจัดการบันทึกช้าของ Alibaba Cloud RDS
การเสริมแรงแบ็กเอนด์ผู้ดูแลระบบ
- ในไดเรกทอรีแพทช์ชื่อคือ django_1.8.17_admin_secure_archer.patch
- ใช้คำสั่ง
patch python/site-packages/django/contrib/auth/views.py django_1.8.17_admin_secure_archer.patch
LDAP แบบรวม
- แก้ไขไฟล์กำหนดค่า enable_ldap = true ติดตั้งโมดูลที่เกี่ยวข้องคุณสามารถเปิดใช้งานการเข้าสู่ระบบบัญชี LDAP, ใช้ centos เป็นตัวอย่าง
yum install openldap-devel
pip install django-auth-ldap==1.3.0
- หากใช้ LDAPS และเป็นใบรับรองที่ลงนามด้วยตนเองคุณต้องเปิดความคิดเห็นของ auth_ldap_global_options ในการตั้งค่า
- การกำหนดค่าเริ่มต้นด้วย auth_ldap ในการตั้งค่าจำเป็นต้องได้รับการแก้ไขตาม LDAP ของตัวเองที่สอดคล้องกัน
ประสบการณ์ระบบ
คลิกเพื่อสัมผัสประสบการณ์
| บทบาท | บัญชี | รหัสผ่าน |
|---|
| ผู้ดูแลระบบ | นักธนู | นักธนู |
| วิศวกร | วิศวกร | นักธนู |
| ผู้วิจารณ์ | ผู้ตรวจสอบบัญชี | นักธนู |
| DBA | DBA | นักธนู |
ปัญหาบางอย่างแก้ไข
บันทึกข้อผิดพลาด
/tmp/default.log & /tmp/archer.err
ข้อยกเว้นการแสดงสไตล์หน้า
- runserver/debug.sh เริ่มต้น
การดีบักถูกปิดในการตั้งค่านั่นคือ debug = false และจำเป็นต้องเพิ่ม -ไม่ปลอดภัยหลังจากคำสั่งเริ่มต้นและกลายเป็น - nginx+gunicorn/startup.sh เริ่มต้น
การกำหนดค่าทรัพยากรแบบคงที่ของ nginx ไม่ถูกต้อง location /static {
alias /archer/static; #此处指向settings.py配置项STATIC_ROOT目录的绝对路径,用于nginx收集静态资源,一般默认为archer按照目录下的static目录
}
การจัดการผู้ใช้
- บางครั้งข้อผิดพลาดของผู้ใช้ถูกรายงานโดย Nginx+Gunicorn/startup.sh การปรับใช้หลายคนอาจเกิดขึ้น ปัญหายังไม่ได้รับการแก้ไขในปัจจุบัน
- ไม่สามารถเข้าสู่ระบบ (ยืนยันว่าชื่อผู้ใช้และรหัสผ่านถูกต้อง)
ตรวจสอบว่าฟิลด์ is_active ของผู้ใช้คือ 1
SQL ออนไลน์
คลัสเตอร์ไม่แสดงฐานข้อมูล
Archer จะกรองฐานข้อมูลระบบบางส่วนตามค่าเริ่มต้นและรายการตัวกรองคือ 'information_schema', 'performance_schema', 'mysql', 'test', 'sys'
ผู้ตรวจสอบไม่แสดงผู้ใช้ที่ถูกต้องซึ่งไม่ใช่บทบาทผู้ตรวจสอบ/DBA
ไม่มีปุ่มดำเนินการหลังจากผ่านการตรวจสอบ
กระบวนการเปิดตัว SQL ของอาร์เชอร์คือ: วิศวกรส่ง SQL-> การตรวจสอบผู้สอบบัญชี-> การดำเนินการ DBA ผู้สอบบัญชีสามารถตรวจสอบข้อมูลที่เป็นของการตรวจสอบของเขาเองเท่านั้นและ DBA ดำเนินการข้อมูลทั้งหมด
ตรวจจับข้อผิดพลาด SQL
- ไม่ถูกต้องตามตัวอักษร int () ที่มีฐาน 10: 'Inception2'
ปรับ pymysql เพื่อให้เข้ากันได้กับข้อมูลเวอร์ชัน Inception
ใช้ไฟล์ในไดเรกทอรี src/docker/pymysql เพื่อแทนที่ไฟล์ใน /path/to/python3/lib/python3.4/site-packages/pymysql/ ไดเรกทอรี - ข้อมูลแหล่งที่มาไม่ถูกต้อง
รหัสผ่านไม่สามารถรวม * - ต้องเริ่มเป็นคำสั่งเริ่มต้น
โมดูล Pymysql ของ Python3 จะส่งคำสั่ง SHOW คำเตือนไปยัง Inception ทำให้เกิดข้อผิดพลาด "ต้องเริ่มต้นเป็นคำสั่งเริ่มต้น" อาร์เชอร์จะรายงานว่าไฟล์ใน /path/to/python3/lib/python3.4/site-packages/pymysql/ ไดเรกทอรีใช้ในบันทึกเพื่อแทนที่ไฟล์ใน/path/to/python3/lib/python3.4/site-packages/pymysql/ - ชื่อฐานข้อมูลไม่ถูกต้อง ''
การตรวจสอบการลงทะเบียนไม่สนับสนุนคำถามย่อย - ข้อมูลการสำรองข้อมูลระยะไกลที่ไม่ถูกต้อง
Inception ไม่สามารถเชื่อมต่อกับไลบรารีสำรองได้
ไม่สามารถสร้างคำสั่งย้อนกลับได้
- ตรวจสอบการกำหนดค่าที่เกี่ยวข้องกับการลงทะเบียนเรียนในไฟล์การกำหนดค่า
- ตรวจสอบสิทธิ์ของผู้ใช้การตรวจสอบการเริ่มต้นและผู้ใช้สำรองข้อมูลการอ้างอิงสิทธิ์
— inception备份用户
GRANT SELECT, INSERT, CREATE ON *.* TO 'inception_bak'
— inception审核用户(主库配置用户,如果要使用会话管理需要赋予SUPER权限,如果需要使用OSC,请额外配置权限)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'inception'
— archer在线查询用户(从库配置用户)
GRANT SELECT ON *.* TO 'archer_read'
- ตรวจสอบรูปแบบ binlog มันจะต้องเป็นแถว binlog_row_image เต็ม
- ตรวจสอบว่าตาราง DML มีปุ่มหลักหรือไม่
- ตรวจสอบว่าคำสั่งมีผลต่อข้อมูลหรือไม่
- ตรวจสอบว่าเปิดใช้งานไลบรารีสำรองสำหรับ AutoCommit หรือไม่
- ตรวจสอบว่าเป็นคำสั่งอัปเดตตารางอย่างต่อเนื่องหรือไม่
- ตรวจสอบว่าอินสแตนซ์การดำเนินการคือ MySQL หรือไม่
กฎ Desensitization ไม่มีผลบังคับใช้
- ตรวจสอบว่าฟิลด์ desensitization กระทบหรือไม่ (ไม่ว่าจะเป็นตัวพิมพ์เล็ก)
- ตรวจสอบว่าการแสดงออกปกติของกฎ desensitization สามารถจับคู่ข้อมูลได้หรือไม่ หากไม่สามารถจับคู่ได้ผลลัพธ์ดั้งเดิมจะถูกส่งกลับ
- ตรวจสอบว่าพารามิเตอร์ check_query_on_off ถูกปิดหรือไม่ทำให้เกิดการเริ่มต้นที่จะไม่สามารถแก้ไขคำสั่งที่ไม่ได้รับการตอบกลับโดยตรงส่งคืนผลลัพธ์การอ้างอิงกฎการกำหนดค่าการกำหนดค่า
| ประเภทกฎ | การแสดงออกปกติที่ใช้สำหรับการ desensitization ปกติจะต้องถูกจัดกลุ่มและกลุ่มที่ซ่อนอยู่จะถูกแทนที่ด้วย **** | กลุ่มที่ต้องซ่อน | คำอธิบายกฎ |
|---|
| หมายเลขโทรศัพท์ | (. {3}) (.*) (. {4}) | 2 | เก็บสามคนแรกและสี่คนสุดท้าย |
| หมายเลข id | (.*) (. {4}) $ | 2 | ซ่อนสี่คนสุดท้าย |
| บัตรธนาคาร | (.*) (. {4}) $ | 2 | ซ่อนสี่คนสุดท้าย |
| ส่งจดหมาย | - | 2 | ลบคำต่อท้าย |
ผู้ตรวจสอบไม่เห็นการอนุญาตแบบสอบถามเพื่อขอใบสั่งงานที่รอดำเนินการ
แอปพลิเคชันการตอบคำถามที่ต้องทำถูกซ่อนอยู่ในไอคอนข้อความที่มุมขวาบน ไอคอนจะปรากฏขึ้นเมื่อมีข้อมูลที่จะตรวจสอบ คุณสามารถป้อนเพื่อดูข้อมูลที่ต้องทำ
บันทึกช้าไม่แสดง
- ตรวจสอบการกำหนดค่าในสคริปต์และเก็บเนื้อหาการกำหนดค่าของโฮสต์ชื่อโฮสต์และอาร์เชอร์ไลบรารีหลักที่สอดคล้องกันและใช้สำหรับอาร์เชอร์เพื่อกรอง
- ตรวจสอบว่าข้อมูลบันทึกที่รวบรวมโดยตาราง mysql_slow_query_review_history นั้นสอดคล้องกับชื่อโฮสต์
งานที่กำหนดเวลาไม่ได้ดำเนินการ
- ตรวจสอบว่ามีการสร้างตารางที่เกี่ยวข้องของ Django-Apscheduler หรือไม่คุณสามารถใช้
python3 manage.py migrate ไปสร้างมันขึ้นมา
ข้อมูลติดต่อ
- QQ Group 1 Group 524233225 (เต็ม)
- QQ Group 2 Group 669833720