MySQL分区与主从的学习笔记

1 分区相关

MySQL5.6中,分区技术只支持水平分区,而不支持垂直分区,分区支持大部分的存储引擎,但是MERGE, CSV, FEDERATED存储引擎不支持。

使用KEY或者LINEAR KEY进行分区是支持NDB(网络数据库)的,但是其他分区方式不支持。
在MySQL中查看是否是支持分区技术,使用命令 SHOW PLUGINS 进行查看,如果存在名称为 partition 的插件,状态为 ACTIVE 则说明分区技术可用。
MySQL5.6支持显式的分区查询,如 SELECT * FROM T PARTITION(p0, p1) WHERE c < 5,可以只从p0,p1分区进行查询

支持的分区类型

RANGE 根据给定列的值的范围进行分区。
LIST 与RANGE类似,不过它通过判断给定列的值是否在独立的值的集合中进行分区。
HASH 这种分区根据对列进行操作的自定义表达式的值进行分区。这个自定义的函数可以包含任何可用的MySQL表达式,但是需要产生一个非负的值,扩展类型有LINEAR HASH.
KEY 这种分区方式与HASH类似,区别是只需要提供一列或者多列的值,通过MySQL自己的哈希函数进行计算,扩展类型有LINEAR KEY.
常用的分区方式可以通过日期, 时间 进行分区。当使用KEY或者LINEAR KEY 方式进行分区的时候,可以直接使用TIME, DATETIME, DATE作为分区列而不需要执行任何的修改(常用时间函数:TO_DAYS(), YEAR, TO_SECONDS, WEEKDAY(),MONTH等)。

2 主从相关

主库和从库都需要配置一个唯一的ID(server-id), 每一个从库都必须配置主库的host名, 日志文件名和配置文件中的位置。

2.1 配置Master

修改 my.cnf 或者 my.ini 文件,在[mysqld]部分,增加(去掉注释)下列选项:
[mysqld]
log-bin=mysql-bin
server-id=1

修改后,重启mysql服务
如果没有设置server-id或者是设置其为默认值 0,master将会拒绝所有slave的连接请求。 使用InnoDB的事务在进行复制的时候,应该设置innodb_flush_log_at_trx_commit=1和sync_binlog=1以获取最佳的稳定性。 确保 skip-networking选项是禁止的,否则如果网络被禁止了,从库将无法与主库进行交流。
主库中需要为从库创建连接用户,主库上的任何具有REPLICATION SLAVE权限的用户都可以作为从库的连接用户。
mysql> CREATE USER 'repl'@'%.mydomain.com' IDENTIFIED BY 'slavepass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.mydomain.com';
如果在主库上已经存在数据了,在与从库进行同步之前,必须先停止主库上的处理进程,然后获取当前二进制日志文件的坐标并dump它的数据。
下面的步骤用于获取主库的二进制日志的坐标:
使用命令行控制台连接到主库上,执行如下命令:

mysql> FLUSH TABLES WITH READ LOCK;
使用 UNLOCK TABLES 释放锁
 mysql > SHOW MASTER STATUS;
 +------------------+----------+--------------+------------------+
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
 +------------------+----------+--------------+------------------+
 | mysql-bin.000003 | 73       | test         | manual,mysql     |
 +------------------+----------+--------------+------------------+
 
如果在启用log-bin之前,主库已经运行一段时间了,则使用SHOW MASTER STATUS命令查看到的日志文件名和位置将会是空的,在这种情况下,在从库中指定日志文件和位置分别为''和4.
如果在进行从库同步复制之前,主库中已经存在数据了,请保持读锁,使用下面的方法将主库的数据复制到从库中。
使用mysqldump创建要复制的所有数据库的一个快照,然后导入到从库中。
# mysqldump -uroot --lock-all-tables --events --all-databases --master-data > dbdump.db
导入dbdump.db文件,使用命令shell> mysql < dbdump.db

2.2 配置slave

修改配置文件
[mysqld]
server-id=2
在从库中,为了进行复制过程,并不需要启用log-bin。但如果在从库中启用log-bin的话,你可以在从库上进行二进制日志备份和崩溃后的恢复,或者将从库作为一个复杂的复制拓扑网络的一部分(例如,从库作为一个其它从库的主库)。
建立从库到主库的连接:
mysql> CHANGE MASTER TO
    ->     MASTER_HOST='master_host_name',
    ->     MASTER_USER='replication_user_name',
    ->     MASTER_PASSWORD='replication_password',
    ->     MASTER_LOG_FILE='recorded_log_file_name',
    ->     MASTER_LOG_POS=recorded_log_position;
例如:
mysql> change master to master_host='10.58.91.4', master_user='repl', master_password='888888',master_log_file='mysql-bin.000002', master_log_pos=385;
注意: 复制不能使用UNIX socket文件,只能使用TCP/IP连接主库。
启动从库
mysql> start slave;
如果出现无法连接的问题,请检查是否服务器iptables对端口有限制

3 常用命令

授权任意主机以root方式访问
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
查看server-id
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 0     |
+---------------+-------+
1 row in set (0.01 sec)

时间: 2024-10-02 14:07:50

MySQL分区与主从的学习笔记的相关文章

mysql中文全文搜索之学习笔记

mysql中模糊搜索关键字可以用like关键字,它可以查询出包涵关键字的字段,但当数据量变大时(比如超过百万条),由于不能使用索引,全表扫描会导致性能很差.那怎么能查询出包涵关键字的内容呢?这时可以采用mysql的全文搜索.但有个前提:需要把进行全文搜索的字段添加fulltext索引,并且只能建立在Myisam引擎上.然后用如match(字段1[,字段2,字段3-]) against('关键字1 关键字2')这样的方式搜索,这样可以查询出某些字段中包涵某些关键字的信息. 另外,用like匹配的是

MySQL 5.5主从同步设置笔记分享_Mysql

先修改Master(10.1.123.197)的 my.cnf 配置 在 [mysqld] 中新增以下内容: 复制代码 代码如下: log-bin=mysql-binlog-bin-index=mysql-bin.indexserver-id = 1sync_binlog=1binlog_format=mixed 然后指定要做同步的数据库,并忽略掉不需要做同步的数据库 复制代码 代码如下: binlog-do-db = testdbbinlog-ignore-db = mysqlbinlog-i

mysql数据库入门教程之学习笔记

mysql复习  一:复习前的准备  1:确认你已安装wamp  2:确认你已安装ecshop,并且ecshop的数据库名为shop     二   基础知识:  1.数据库的连接  mysql -u -p -h  -u 用户名  -p 密码  -h host主机  2:库级知识  2.1 显示数据库: show databases;  2.2 选择数据库: use dbname;  2.3 创建数据库: create database dbname charset utf8;  2.3 删除数

php与mysql数据库cookie Session 分页学习笔记

 代码如下 复制代码   <?php $con = mysql_connect("localhost","root","222222"); if (!$con)   {   die('Could not connect: ' . mysql_error());   }   echo "成功"   //mysql_close($con); 关闭连接 //var_dump($row); 打印出来 //print_r(); 打

MYSQL外键约束的学习笔记

在项目中,很多时候我们建数据表单的时候,两个表示相关联的,并且一个表里面的数据是完全依赖另一张表的数据的, 外键约束语法 [CONSTRAINT [symbol]] FOREIGN KEY     [index_name] (index_col_name, ...)     REFERENCES tbl_name (index_col_name,...)     [ON DELETE reference_option]     [ON UPDATE reference_option] refer

mysql表分区创建使用学习笔记

表分区的测试使用,主要内容来自于其他博客文章以及mysql5.1的参考手册 mysql测试版本:mysql5.5.28 mysql物理存储文件(有mysql配置的datadir决定存储路径)格式简介 数据库engine为MYISAM   frm表结构文件,myd表数据文件,myi表索引文件. INNODB engine对应的表物理存储文件 " innodb的数据库的物理文件结构为: .frm文件 .ibd文件和.ibdata文件: 这两种文件都是存放innodb数据的文件,之所以用两种文件来存放

spring学习笔记(19)mysql读写分离后端AOP控制实例

在这里,我们接上一篇文章,利用JNDI访问应用服务器配置的两个数据源来模拟同时操作不同的数据库如同时操作mysql和oracle等.实际上,上个例子可能用来模拟mysql数据库主从配置读写分离更贴切些.既然如此,在本例中,我们就完成读写分离的模拟在web端的配置实例. 续上次的例子,关于JNDI数据源的配置和spring datasource的配置这里不再重复.下面着重加入AOP实现DAO层动态分库调用.可先看上篇文章<spring学习笔记(18)使用JNDI模拟访问应用服务器多数据源实例 >

一千行的MySQL学习笔记汇总_Mysql

本文详细汇总了MySQL学习中的各类技巧,分享给大家供大家参考. 具体如下: /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCE

MySQL数据库学习笔记(一)

mysql|笔记|数据|数据库         我一直从事Informix和Oracle数据库开发,有一天发现网络上有一种小巧别致的数据库,被广泛使用,从MySQL的网站http://www.mysql.com/我下载了它的数据库软件,使用过后觉得真的挺好,这是我的一点学习笔记希望对各位初学者有点帮助. 1.       MySQL数据库介绍 MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统,它具有客户机/服务器体系结构的分布式数据库管理系统.MySQ