快速创建mysql数据库_快速创建一个MySQL从库的方法

以快速创建一个MySQL从库的需求出发,如下几种备选方案:

环境:

node1  主库

node2  新服务器,需要做成node1从库  (node1已经配置免密码SSH登陆到node2)

软件版本:

MySQL 官方5.6版本,数据库的用户名和密码都是root

都安装了percona-xtrabackup

0 弱鸡版:【最耗时间】

mysqldump -uroot -proot -q --single-transaction -A --master-data=2 > /root/all.sql  # 备份

mysql -uroot -proot < /root/all.sql  # 还原

这种方式最简单的,不多说。

1 初级版:

innobackupex --user=root --password=root --socket=/var/lib/mysql/mysql.sock --parallel=4 --no-timestamp /root/bak

缺点速度慢,备份的文件较大。好处是相对于mysqldump而言,这个工具能并行备份操作。

scp /root/bak root@node2:/root  # 将/root/bak这个压缩后的文件scp到目标主机node2,

然后去node2解压命令如下:

mkdir /tmp/mysql  # /tmp/mysql 这是个临时存放拷贝过来的数据库解压文件目录,和mysql的自己的datadir没有任何关系

cat /root/bak | lz4 -d | xbstream -x -C /tmp/mysql

innobackupex --apply-log /tmp/mysql/# 导入数据后,还要执行下整理操作

innobackupex --copy-back  /tmp/mysql/  # 将整理好的数据库文件导入到原先的mysql datadir里

chown mysql.mysql  /data/mysql/ -R

/etc/init.d/mysql start 这样一台mysql就启动好了

2 lz4加速版:

yum install lz4 -y  # 先在2台主机上安装这个压缩工具,性能比gzip、bzip2强很多。

node1上备份:

innobackupex --user=root \

--password=root \

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

--parallel=4 \

--no-timestamp \

--stream=xbstream . | lz4 -B4 > /root/bak

scp /root/bak root@node2:/root  # 将/root/bak这个压缩后的文件scp到目标主机node2,

然后去node2执行如下命令:

mkdir /tmp/mysql

cat /root/bak | lz4 -d | xbstream -x -C /tmp/mysql

innobackupex --apply-log /tmp/mysql/# 导入数据后,还要执行下整理操作

innobackupex --copy-back  /tmp/mysql/  # 将整理好的数据库文件导入到原先的mysql datadir里

chown mysql.mysql  /data/mysql/ -R

/etc/init.d/mysql start 这样一台mysql就启动好了

3 管道加强版:

innobackupex --user=root \

--password=root \

--parallel=4 \

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

--no-timestamp \

--stream=xbstream . |\

lz4 -B4 |\

ssh root@node2 \

"cat - > /tmp/bak"

# 上面这条命令是直接压缩并备份到远程的/tmp目录下

然后到node2上去还原:

mkdir /tmp/mysql

cat /tmp/bak | lz4 -d -B7 | xbstream -x -C /tmp/mysql

innobackupex --apply-log /tmp/mysql/# 导入数据后,还要执行下整理操作

innobackupex --copy-back  /tmp/mysql/  # 将整理好的数据库文件导入到原先的mysql datadir里

chown mysql.mysql  /data/mysql/ -R

/etc/init.d/mysql start 这样一台mysql就启动好了

4 直接备份到远程同时还原版: 【推荐使用方法4】

首先需要在node2上创建个/tmp/mysql目录,不然node1备份文件发送过去没目录存放。

然后再node1上执行:

innobackupex --user=root \

--password=root \

--parallel=4 \

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

--no-timestamp \

--stream=xbstream . |\

lz4 -B4 |\

ssh node2 \

"cat - | lz4 -d -B7 | xbstream -x -C /tmp/mysql"

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MyBatis 中使用临时表的方式和在普通 SQL 语句中使用临时表的方式是一样的。 首先需要在 SQL 语句中创建临时表,然后再进行相关操作。下面以 MySQL 数据库为例,演示如何在 MyBatis 中使用临时表。 1. 创建临时表 在 MySQL 中,可以使用以下语句创建临时表: ```sql CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(20) ); ``` 2. 在 MyBatis 中使用临时表 首先,在 MyBatis 的 Mapper 文件中定义 SQL 语句,并将创建临时表的 SQL 语句和相关操作的 SQL 语句写在一起,例如: ```xml <mapper namespace="com.example.mapper.TempTableMapper"> <select id="queryTempTable" resultType="java.util.Map"> <![CDATA[ CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(20) ); INSERT INTO temp_table (id, name) VALUES (1, '张三'); INSERT INTO temp_table (id, name) VALUES (2, '李四'); SELECT * FROM temp_table; ]]> </select> </mapper> ``` 在上面的例子中,先创建了一个临时表 `temp_table`,然后插入了两条数据,最后查询了整个表。 3. 调用 Mapper 方法执行 SQL 语句 在 Java 代码中,调用 Mapper 方法执行 SQL 语句即可,例如: ```java public interface TempTableMapper { List<Map<String, Object>> queryTempTable(); } public class MyBatisTest { public static void main(String[] args) { SqlSession sqlSession = MyBatisUtil.getSqlSession(); TempTableMapper tempTableMapper = sqlSession.getMapper(TempTableMapper.class); List<Map<String, Object>> resultList = tempTableMapper.queryTempTable(); System.out.println(resultList); sqlSession.close(); } } ``` 最后,执行 Java 代码即可看到查询结果。需要注意的是,在 MyBatis 中创建的临时表只在当前的会话中存在,在会话关闭时会自动删除。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值