1、打开mysql的客户端 这里使用navicat,连接数据库,等到navicat主页面,双击需要 *** 作的数据库连接。
2、登录到数据库主页面后,点击左侧的数据库连接,打开数据库,可以看到可以 *** 作的所有数据库。
3、这时有有两个数据库,目标是将数据1的所有数据同步到数据库2上,需要点击主页面上的。
4、打开工具菜单,选择数据库同步菜单,d出数据同步的对话框,可以选择数据源,目标数据库。
5、选择数据库源和需要 *** 作的数据库后,然后在选择目标数据库连接,目标数据库,然后在选择需要 *** 作的表,点击开始即可。
可以说mysql的多数特性都是围绕日志文件实现,而其中最重要的有以下三种
innodb 为了提高磁盘I/O读写性能,存在一个 buffer pool 的内存空间,数据页读入会缓存到 buffer pool,事务的提交则实时更新到 buffer pool,而不实时同步到磁盘(innodb 是按 16KB 一页同步的,一事务可涉及多个数据页,实时同步会造成浪费,随机I/O)。事务暂存在内存,则存在一致性问题,为了解决系统崩溃,保证事务的持久性,我们只需把事务对应的 redo 日志持久化到磁盘即可(redo 日志占用空间小,顺序写入磁盘,顺序I/O)
sql 语句在执行的时候,可能会修改多个页面,还会更新聚簇索引和二级索引的页面,过程产生的redo会被分割成多个不可分割的组(Mini-Transaction)。MTR怎么理解呢?如一条 insert 语句可能会使得页分裂,新建叶子节点,原先页的数据需要复制到新数据页里,然后将新记录插入,再添加一个目录项指向新建的页子。这对应多条 redo 日志,它们需要在原子性的 MTR 内完成
MTR 产生的 redo 日志先会被复制到一个 log buffer 里(类似 buffer pool)。而同步到磁盘的时机如下:
事务需要保证原子性,也是说事务中的 *** 作要么全部完成,要么什么也不做。如果事务执行到一半,出错了怎么办-回滚。但是怎么回滚呢,靠 undo 日志。undo 日志就是我们执行sql的逆 *** 作
binlog有三种格式:Statement、Row以及Mixed。
redolog 中的事务如果经历了二阶段提交中的prepare阶段,则会打上 prepare 标识,如果经历commit阶段,则会打上commit标识(此时redolog和binlog均已落盘)。崩溃恢复逻辑如下:
Mysql创建数据库时会在如下目录创建以数据库名为名的目录
show variables like "%datadir%"
数据文件日志也就在相应目录下了。
日志大小、看看这些参数是否能达到你的目的:
命令行参数–log-bin=filename:记录二进制日志文件的位置,尽量指定路径名,如果不指定的话则保存在数据目录
–log-bin-index=file:记录二进制日志文件索引的位置,保存了日志文件名
–max_binlog_size:单个文件最大多少
–binlog-do-db=db_name:哪个数据库使用,只有这个数据库使用
–binlog-ignore-db=db_name:哪个数据库不使用,只有这个数据库不使用
系统变量
log_bin:日志的位置
binlog_cache_size:二进制日志缓存大小,是每一个连接进来的线程分配的大小,不是整个服务器的大小
max_binlog_cache_size:最大缓存大小
max_binlog_size:单个文件最大大小,超过此大小则再分配一个文件,但是一个事务必须在一个文件中,所以可能会稍大点
binlog_cache_use:当前连接使用的binlog缓存的事务的数量,使用show status like ‘binlog_cache_use’查看(show status命令显示了所有连接到mysql服务器的状态值)
binlog_cache_disk_use:如果binlog_cache_use不够用,则在磁盘上缓存,应该尽量避免
binlog_do_db:设置master-slave时使用
binlog-ignore-db:设置哪个数据库不记录日志
sync_binlog:缓存与硬盘的同步频率(commit多少下同步一次,0表示服务器自动控制)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)