腾讯云数据库mysql扩容步骤(mysql扩容方案)

发布时间:2022-11-16

本文目录一览:

  1. 腾讯云服务器怎么搭建支持外网访问的mysql数据库
  2. 腾讯云如何正确配置mysql
  3. 如何进行mysql的动态扩容和缩容
  4. js如何连接和操作腾讯云mysql数据库

腾讯云服务器怎么搭建支持外网访问的mysql数据库

使用第三方一键php包的配置。win服务器还是linux 服务器都可以在三方面板中成功配置出可视化操作界面,然后一键部署php环境。 接下去就是这些步骤了:

  1. 注册域名
  2. 选购服务器
  3. 网站备案
  4. 搭建网站环境
  5. 安装网站程序
  6. 充实网站内容
    数据库操作就是这么来的。因为这方面内容较多,留言或到博客找相关内容,老魏写过不少详细的内容,可以帮助入门。

腾讯云如何正确配置mysql

配置mysql只需要安装这个程序就可以的。如果是和程序结合起来,那么就要安装 lnmp一键包,这里面自带的相应的程序,比较省事。

如何进行mysql的动态扩容和缩容

mysql在线扩容和缩容一般涉及到的内容,主要包括三个方面:

  1. 在线也就意味着需要把增量的数据重新分布到新的拓扑结构中,我们一般称做增量复制。
  2. 原有的数据需要一条不漏的扫出来重新分布到新的拓扑结构中,这个一般叫做全量复制。
  3. 全量做完,增量正在同步,把应用的数据路由拓扑切到新的路由拓扑上来,并且做到无数据丢失,这个我们叫做停写切换。 做好这三个方面的工作,能够达到的效果就是应用在最后切换数据分布拓扑的时刻,只要停写非常短的时间(秒级别)就能够做到无数据丢失的扩容和缩容。

增量同步

增量同步一般有2种方式:

  • 应用端或者数据库前端做trigger,记录变更数据的特征值log(比如pk,sharding key),然后异步复制到新的拓扑结构中。
  • 通过分析mysql的binlog再进行不同数据拓扑的复制。 后者可能更加简便,并且对应用无侵入,前者虽然也能够做到,实际实现或者推广和操作上都有不少阻力,最起码解析binlog方式是mysql一上去,更新的log已经天然存在与binlog中了。

全量复制

全量复制也就是扫描需要复制的表的数据进行重新分布,主要存在的问题是复制速度和对数据库的写入压力的矛盾。可以考虑分时段调整复制线程数,一般单线程复制对于数据库的影响不会很大,在凌晨再转换成多线程方式达到提速的目标。

切换阶段

扩容或者缩容在最后阶段如何切换,这个涉及到的问题主要是如何避免新更新进来以至于增量没完没了:

  • 最简单的方法就是停掉应用,一般时间只有几分钟是可以接受的。
  • 另一种是逻辑停写,通过动态的数据路由数据推送,可以完全避免重新发布达到扩容或者缩容。 数据扩容或者缩容,我们觉得不应该排入业务的开发日程中,而是由数据管理团队对应用透明地进行这种操作,最后介入的人员只是DBA而已。

js如何连接和操作腾讯云mysql数据库

首先是登陆腾讯云,登陆之后可以领取新手礼包。 进入云产品-数据库-CDB for MYSQL-立即选购,选购最低配的可用礼包抵扣使用一个月,购买完成。 主页-右上角产品管理-使用中的数据库,这时我们会看见一个实例,首先我们进入管理页面对实例进行一些基本的设置。

  • 实例名可以随意更改。
  • 外网地址必须开启,否则我们就不能在自己的项目中和本地访问云数据库。
  • 进入账号管理页面修改自己的root密码。
  • 然后点击右上角的登录数据库。 登陆完成之后如下图: 这个和本地客户端操作基本相同,我就不详细阐述了。

使用一个demo来说明如何操作云mysql数据库

  1. 在实例上新建一个名为 nodejs 的数据库,然后新建一个名为 employee 的表,新建四个字段:namesexageemail,除了年龄为 int,其它的全部为 varchar 格式。
  2. 新建一个 TimLiu 的文件夹,打开 cmdcd TimLiu,初始化项目 npm init,按照它的提示一步一步的操作即可,安装 mysql 模块:npm install mysql,这个模块的作用主要是连接 mysql 数据库。
  3. 新建一个 model.js 文件:
var mysql = require('mysql');
var connection = mysql.createConnection({
    host: '',
    user: 'root',
    password: '123abc',
    database: 'nodejs',
    port: 6445
});
connection.connect();
/**
 * 增加员工
 */
function addEmployee() {
    var employeeInsertSql = 'INSERT INTO employee(name,sex,age,email) VALUES(?,?,?,?)';
    var employeeInsertSql_Params = ['Tim', '男', 22, '18818216454@163.com'];
    connection.query(employeeInsertSql, employeeInsertSql_Params, function(err, result) {
        if (err) console.log('[INSERT ERR]-', err.message);
        console.log(result);
    });
}
addEmployee();
/**
 * 更新员工
 */
function insertEmployee() {
    var employeeUpdateSql = "UPDATE employee SET name = ? WHERE age =?";
    var employeeUpdateSql_Params = ['Peter', 22];
    connection.query(employeeUpdateSql, employeeUpdateSql_Params, function(err, result) {
        if (err) console.log('[UPDATE ERR]-', err.message);
        console.log(result);
    });
}
insertEmployee();
/**
 * 查询员工
 */
function getEmployee() {
    var employeeGetSql = "SELECT * FROM employee";
    connection.query(employeeGetSql, function(err, result) {
        if (err) console.log('[SELECT ERR]-', err.message);
        console.log(result);
    });
}
getEmployee();
/**
 * 删除员工
 */
function deleteEmployee() {
    var employeeDeleteSql = "DELETE employee WHERE name = ?";
    var employeeDeleteSql_Params = 'Peter';
    connection.query(employeeDeleteSql, employeeDeleteSql_Params, function(err, result) {
        if (err) console.log('[DELETE ERR]-', err.message);
        console.log(result);
    });
}
deleteEmployee();

这样我们就可以愉快的操作数据库了。

模块化操作

如果大家想把项目更模块化操作,可在 model 下新建一个 employee_two.js,代码如下:

var mysql = require('mysql');
var connection = mysql.createConnection({
    host: '',
    user: 'root',
    password: '',
    database: 'nodejs',
    port: ''
});
connection.connect();
/**
 * 增加员工
 * @param {String} employee
 * @param {Function} callback
 */
exports.addEmployee = function(employee, callback) {
    var employeeInsertSql = 'INSERT INTO employee(name,sex,age,email) VALUES(?,?,?,?)';
    var employeeInsertSql_Params = [employee.name, employee.sex, employee.age, employee.email];
    connection.query(employeeInsertSql, employeeInsertSql_Params, callback);
};
/**
 * 更新员工
 * @param {String} employee
 * @param {Function} callback
 */
exports.updateEmployee = function(name, age) {
    var employeeUpdateSql = "UPDATE employee SET name = ? WHERE age =?";
    var employeeUpdateSql_Params = ['Peter', 22];
    connection.query(employeeUpdateSql, employeeUpdateSql_Params, function(err, result) {
        if (err) console.log('[UPDATE ERR]-', err.message);
        console.log(result);
    });
};
/**
 * 查询员工
 */
exports.getEmployee = function(callback) {
    var employeeGetSql = "SELECT * FROM employee";
    connection.query(employeeGetSql, callback);
};
/**
 * 删除员工
 * @param {String} name
 */
exports.deleteEmployee = function(name) {
    var employeeDeleteSql = "DELETE employee WHERE name = ?";
    var employeeDeleteSql_Params = 'Peter';
    connection.query(employeeDeleteSql, employeeDeleteSql_Params, callback);
};

再在根目录下新建 index.js,代码如下:

var db = require('./model/employee_two');
// 增加员工
var employee = {
    name: 'lisa',
    age: 22,
    sex: "女",
    email: '99533212@qq.com'
};
db.addEmployee(employee, function(err, result) {
    if (err) console.log("[INSERT err]-", err.message);
    console.log(result);
});
// 删除员工
db.deleteEmployee('Peter', function(err, result) {
    if (err) console.log("[DELETE err]-", err.message);
    console.log(result);
});
// 更新员工
db.updateEmployee('Tim', 23, function(err, result) {
    if (err) console.log("[UPDATE err]-", err.message);
    console.log(result);
});
// 查询员工
db.getEmployee(function(err, result) {
    if (err) console.log("[GET err]-", err.message);
    console.log(result);
});