2024年8月15日(python管理MySQL数据库 mysql5.7读写分离 配置mycat)

news2024/9/20 14:28:53

一、pymysql管理数据库

1、搭建主mysql5.7

[root@mysql57 ~]# ls
anaconda-ks.cfg  mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
[root@mysql57 ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 
[root@mysql57 ~]# ls
anaconda-ks.cfg
mysql-5.7.44-linux-glibc2.12-x86_64
mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
[root@mysql57 ~]# cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql
[root@mysql57 ~]# rm -rf /etc/my.cnf
[root@mysql57 ~]# mkdir /usr/local/mysql/mysql-files
[root@mysql57 ~]# useradd -r -s /sbin/nologin mysql
[root@mysql57 ~]# chown mysql:mysql /usr/local/mysql/mysql-files/
[root@mysql57 ~]# ls /usr/local/mysql/
bin   docs     lib      man          README  support-files
data  include  LICENSE  mysql-files  share
[root@mysql57 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql57
[root@mysql57 ~]# service mysql57 start
Starting MySQL.Logging to '/usr/local/mysql/data/mysql57.err'.
 SUCCESS! 

[root@mysql57 ~]# /usr/local/mysql/bin/mysql -p

mysql> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.00 sec)

mysql> create user 'lxe'@'%' identified by 'lxe';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to 'lxe'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> create table user(id int primary key auto_increment,username varchar(45) not null,password varchar(45) not null); 
Query OK, 0 rows affected (0.00 sec)

mysql> insert into user (username,password)values("aaa","aaa");
Query OK, 1 row affected (0.00 sec)

mysql> select * from user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | aaa      | aaa      |
+----+----------+----------+
1 row in set (0.00 sec)

[root@localhost ~]# python3

>>> import pymysql
>>>conn=pymysql.connect(host="192.168.8.176",port=3306,database="test",user="lxe",password="lxe");
>>> cursor=conn.cursor()
mysql> update mysql.user set host='%' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
>>> conn=pymysql.connect(host="192.168.8.176",port=3306,database="test",user="root",password="root");
>>> cursor.execute("create user 'slave0'@'%' identified by 'slave0'")  #创建用户
>>> cursor=conn.cursor()  

>>> cursor.execute("grant replication slave on *.* to 'slave0'@'%'")  #给权限
>>> cursor.execute("flush privileges")   #刷新

>>> cursor.execute("flush tables with read lock")
0
>>> cursor.execute("unlock tables")   #锁表
0
>>> cursor.execute("show master status")
0
>>> print(cursor.fetchall())
()

[root@mysql57 ~]# vim /usr/local/mysql/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/db01-master.err
log-bin=/usr/local/mysql/data/binlog
server-id=10
character_set_server=utf8mb4

[root@mysql57 ~]# service mysql57 restart

>>> conn=pymysql.connect(host="192.168.8.176",port=3306,database="test",user="lxe",password="lxe");
>>> cursor=conn.cursor()
>>> cursor.execute("show master status")
1
>>> print(cursor.fetchall())
(('binlog.000001', 154, '', '', ''),)
>>> cursor.execute("unlock tables")
0
2、从服务器

[root@salve57 ~]# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz 
[root@salve57 ~]# cp -r mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql
[root@salve57 ~]# ls /usr/local/mysql/
bin   include  LICENSE  README  support-files
docs  lib      man      share
[root@salve57 ~]# mkdir /usr/local/mysql/mysql-files
[root@salve57 ~]# useradd -r -s /sbin/nologin mysql
[root@salve57 ~]# chown mysql:mysql /usr/local/mysql/mysql-files/
[root@salve57 ~]# chmod 750 /usr/local/mysql/mysql-files/

[root@slave57 ~]# rm -rf /etc/my.cnf
[root@slave57 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql8

[root@salve57 ~]# yum -y install rsync

[root@salve57 ~]# vim /usr/local/mysql/data/my.cnf

[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/data/err.log
log-relay=/usr/local/mysql/data/relaylog
character_set_server=utf8mb4
server-id=11

[root@salve57 ~]# sed -i '$aexport PATH=$PATH:/usr/local/mysql/bin' /etc/profile

[root@salve57 ~]# sed -n '$p' /etc/profile

export PATH=$PATH:/usr/local/mysql/bin
[root@salve57 ~]# source /etc/profile
[root@salve57 ~]# chkconfig --add mysql57
[root@salve57 ~]# chkconfig mysql57 on

[root@salve57 ~]# service mysql57 start

3、主服务器

[root@mysql57 ~]# chmod 750 /usr/local/mysql/mysql-files/
[root@mysql57 ~]# rm -rf /usr/local/mysql/data/auto.cnf 
[root@mysql57 ~]# yum -y install rsync
[root@mysql57 ~]# rsync -av /usr/local/mysql/data root@192.168.8.177:/usr/local/mysql/

二、企业架构MySQL读写分离

三、mycat读写分离

Mycat数据库中间件

国内最活跃的、性能最好的开源對据库中间件!

官方网址:http://www.mycat.io/https://github.com/MyCATApache/MyCAT-Server/

因为mycat是由java语言开发,必须使用java的运行环境才能进行启动和操作

步骤

1、上传jdk和mycat安装包

[root@mycat ~]# ls
jdk-8u192-linux-x64.tar.gz
Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

2、解压并添加到指定的位置

[root@mycat ~]# tar -xf jdk-8u192-linux-x64.tar.gz 
[root@mycat ~]# tar -xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz 
[root@mycat ~]# cp -r jdk1.8.0_192/ /usr/local/jdk
[root@mycat ~]# cp -r mycat/ /usr/local/
[root@mycat ~]# ls /usr/local/jdk/

3、配置jdk文件
[root@mycat ~]# sed -i '$aexport JAVA_HOME=/usr/local/jdk' /etc/profile
[root@mycat ~]# sed -n '$p' /etc/profile
export JAVA_HOME=/usr/local/jdk
[root@mycat ~]# source /etc/profile
[root@mycat ~]# $JAVA_HOME
-bash: /usr/local/jdk: 是一个目录
[root@mycat ~]# sed -i '$aexport PATH=$PATH:$JAVA_HOME/bin' /etc/profile
[root@mycat ~]# sed -n '$p' /etc/profile
export PATH=$PATH:$JAVA_HOME/bin
[root@mycat ~]# source /etc/profile
[root@mycat ~]# $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/jdk/bin: 没有那个文件或目录
[root@mycat ~]# javac -version
javac 1.8.0_192
4、测试启动mycat
[root@mycat ~]# /usr/local/mycat/bin/mycat console
 5、找到server.xml schema.xml文件并更改
[root@mycat ~]# vim /usr/local/mycat/conf/server.xml
 93         <user name="lxe" defaultAccount="true">
 94                 <property name="password">lxe</property>
 95                 <property name="schemas">test</property>

107 <!--
108         <user name="user">
109                 <property name="password">user</property>
110                 <property name="schemas">TESTDB</property>
111                 <property name="readOnly">true</property>
112         </user>
113 -->
 5         <schema name="test" dataNode="dn1" checkSQLschem    a="false" sqlMaxLimit="100">
  6         </schema>
  7         <dataNode name="dn1" dataHost="localhost1" datab    ase="test" />
  8 <!--    <dataNode name="dn2" dataHost="localhost1" datab    ase="db2" />
  9         <dataNode name="dn3" dataHost="localhost1" datab    ase="db3" /> -->

 14         <dataHost name="localhost1" maxCon="1000" minCon    ="10" balance="0"
 15                           writeType="0" dbType="mysql" d    bDriver="native" switchType="1"  slaveThreshold="100">
 16                 <heartbeat>select user()</heartbeat>
 17                 <!-- can have multi write hosts -->
 18                 <writeHost host="hostM1" url="192.168.8.    176:3306" user="lxe"
 19                                    password="lxe">
 20                         <!-- can have multi read hosts -    ->
 21                         <readHost host="hostS2" url="192    .168.8.177:3306" user="lxe" password="lxe" />
 22                 </writeHost>
 23 <!--            <writeHost host="hostS1" url="localhost:    3316" user="root"
 24                                    password="123456" />-
    ->
6、启动mycat并测试 

[root@mycat ~]# /usr/local/mycat/bin/mycat start
[root@mycat ~]# netstat -lnput | grep 8066

[root@client ~]# cd mysql-5.7.44-linux-glibc2.12-x86_64/
[root@client mysql-5.7.44-linux-glibc2.12-x86_64]# cd bin/
[root@client bin]# ./mysql -h192.168.8.178 -P8066 -ulxe -plxe

mysql> show databases;
+--------------------+
| Database           |
+--------------------+              |
| test               |
+--------------------+


mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from user;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
|  1 | aaa      | aaa      |
+----+----------+----------+
1 row in set (0.00 sec)

mysql> show variables like "server_id";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 10    |
+---------------+-------+
1 row in set (0.02 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消息驱动Stream---基于SpringCloud

概要&#xff1a;实际开发中&#xff0c;服务与服务之间的通信经常会使用到消息中间件&#xff0c;而以往使用的一些消息中间件&#xff0c;比如RabbitMQ&#xff0c;该中间件和系统的耦合性非常高&#xff0c;如果我们要将RabbitMQ替换为Kafka&#xff0c;那么系统将会有较大的…

垃圾收集器G1ZGC详解

G1收集器(-XX:UseG1GC) G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征. G1将Java堆划分为多个大小相等的独立区域&#xff08;Region&#xff09;&#xff0c;JVM目…

Python教程(十五):IO 编程

目录 专栏列表引言基础概念什么是IO&#xff1f; 同步IO vs 异步IO同步IO&#xff08;Synchronous IO&#xff09;异步IO&#xff08;Asynchronous IO&#xff09; Python中的IO标准IO标准输入和输出 文件IO文件操作的上下文管理器打开文件读取文件 高级文件操作读写二进制文件…

go注册到eureka微服务

// 注册到 Eureka&#xff0c;goeureka会自动30秒发送一次心跳 package mainimport ("fmt""github.com/SimonWang00/goeureka""github.com/gin-gonic/gin""github.com/robfig/cron/v3""time""wbGo/configs" )typ…

【C++小白到大牛】红黑树那些事儿

目录 前言&#xff1a; 一、红黑树的概念 二、红黑树的性质 三、红黑树结点的定义 四、红黑树的插入 情况一&#xff1a;u存在且为红 情况二&#xff1a;u不存在/u存在且为黑 小总结&#xff1a; 原码&#xff1a; 五、红黑树的检验 六、性能比较 前言&#xff1a; …

Linux知识复习第4期

web服务器的基本用法 目录 1、安装 2、启动 3、默认发布目录 1、安装 yum install nginx -y # nginx安装 yum install httpd -y # apache安装 2、启动 systemctl enable --now httpd systemctl enable --now nginx 3、默认发布目录 /usr/www/html/ # …

Python OpenCV 影像处理:影像轮廓

► 前言 上篇介绍使用OpenCV Python对于图像上的二值化操作&#xff0c;二值化主要用途包括图像分割、物体侦测、文字识别等。这种转换可以帮助检测图像中的物体或特定特征&#xff0c;并提取有用的信息&#xff0c;本篇基于二值化操作进行近一步的操作&#xff0c;透过影像梯…

一六七、Linux安装go并部署go项目

Linux 下安装 Golang 获取Golang下载地址 标准官网&#xff1a;https://go.dev/国内镜像官网&#xff1a;https://golang.google.cn/ 安装 1. 进入终端&#xff0c;登入root su - root2. 来到应用安装目录 cd /usr/local3. 使用 wget 下载 如果没有安装 wget 可通过软件…

《向量数据库指南》——Dopple LAbs:展望未来:构建多模态交互的尖端体验

Dopple LAbs:展望未来:构建多模态交互的尖端体验 在快速迭代的科技领域,Dopple LAbs正以其前瞻性的视野和创新精神,引领着人机交互的新篇章。Sam及其团队近期通过一系列技术突破,显著增强了其服务的沉浸感和互动性,为用户带来了前所未有的视听盛宴。以下,我们将深入探讨…

智慧农业大数据助力智慧农业建设

1. 智慧农业概述 智慧农业作为现代农业发展的重要方向&#xff0c;融合了互联网、大数据、云计算、物联网等现代信息技术&#xff0c;旨在提高农业生产效率&#xff0c;实现精准化管理和产品溯源。通过智慧农业的实施&#xff0c;可以解决传统农业面临的信息不对称、融资困难等…

打工人上班适合用的蓝牙耳机推荐?几款开放式耳机推荐

日常工作的话&#xff0c;我还是比较推荐开放式蓝牙耳机的&#xff0c;它特别适合那些需要在长时间工作中保持专注和舒适度的环境&#xff0c;那开放式耳机其实还有一些主要的优点&#xff1a; 减少耳朵疲劳&#xff1a;由于开放式耳机不需要紧密贴合耳朵&#xff0c;因此可以…

复习之 java 锁

裁员在家&#xff0c;没有面试机会&#xff0c;整理整理面试知识点吧&#xff01; 不得不知道的java 锁 Java 中&#xff0c;提供了两种方式来实现同步互斥访问&#xff08;也就是锁&#xff09;&#xff1a;synchronized 和 Lock 多线程编程中&#xff0c;有可能会出现多个线…

使用静态住宅代理解锁YouTube营销的新维度

YouTube作为众多跨境商家的重要营销推广阵地&#xff0c;YouTube的运营数据与店铺的开单息息相关。那么如何做好YouTube营销来增加产品的知名度呢&#xff1f;如何高效运营YouTube矩阵并防止账号间的关联呢&#xff1f;下文介绍的静态住宅代理就能在YouTube营销上助你一臂之力。…

HTML知识点二——表单

表单&#xff1a; 基本语法&#xff1a; <form method"post" action"xxx"><p>名字&#xff1a;<input name"name" type"text"></p><p>密码&#xff1a;<input name"pass" type"pass…

音频进阶学习二——模数和数模转换中的采样、量化和编码

文章目录 前言一、频率连续时间信号的频率数字信号的频率 二、模数转换过程A/D转换三步 三、采样确定采样频率数模转换中的插值 四、量化量化过程量化误差 五、编码总结 前言 所有软件的运行都得益于硬件上的突破&#xff0c;数字信号是从40年前就开始高速发展的领域。得益于硬…

【机器学习】深度强化学习–RL的基本概念、经典场景以及算法分类

引言 深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;是机器学习的一个分支&#xff0c;它结合了深度学习&#xff08;Deep Learning&#xff09;和强化学习&#xff08;Reinforcement Learning, RL&#xff09;的技术 文章目录 引言一、深度强化学习–…

为什么 React 的函数组件每次渲染执行两次

1.这是 React18 才新增的特性。 2.仅在开发模式("development")下&#xff0c;且使用了严格模式("Strict Mode")下会触发。 生产环境("production")模式下和原来一样&#xff0c;仅执行一次。 在 React 中&#xff0c;当你看到某些代码执行了多…

整合Rocketmq实现审批流消息推送

文章目录 Docker 部署 RocketMQ拉取 RocketMQ 镜像创建容器共享网络 部署NameServer创建目录并授予权限拷贝启动脚本启动容器NameServer 部署Broker Proxy创建挂载文件夹并授权创建broker.cnf文件拷贝启动脚本启动容器Broker 部署RocketMQ控制台&#xff08;rocketmq-dashboar…

12、springboot3 vue3开发平台-前端-记住我功能实现

文章目录 1. 前端用户信息保存2. 登录页面添加3. 后端实现 1. 前端用户信息保存 使用pinia持久化保存用户名密码 src/stores/remember-me.js // 定义 store import { defineStore } from "pinia" import {reactive} from vueexport const useRememberMeStore defi…

求职Leetcode算法题(7)

1.搜索旋转排序数组 这道题要求时间复杂度为o&#xff08;log n&#xff09;&#xff0c;那么第一时间想到的就是二分法&#xff0c;二分法有个前提条件是在有序数组下&#xff0c;我们发现在这个数组中存在两部分是有序的&#xff0c;所以我们只需要对前半部分和后半部分分别…