MySQL主从及Linux下MySQL的设置

1、复制

一种高可用、高性能的解决方案,一般用来建立大型的应用。

三个步骤:

(1)主服务器把数据更新记录到二进制日志中

(2)从服务器把主服务器的二进制日志拷贝到自己的中继日志中

(3)从服务器重做日志中的时间,把更新应用到自己的数据库

0.png

1.png


MySQL的复制是异步同步的,并非完全的主从同步。
从服务器上可以启动read-only选项:
[mysqld]
read-only
快照+复制的备份架构

2.png

4.png

3.png

 

2、性能调优

5.png


(1)选择合适的CPU

数据库应用一般分为两类:

OLTP:在线事务处理,日常事务处理应用中,如银行交易,在线商品交易,blog等

OLAP:在线分析处理,多用于数据仓库或数据集市中,一般需要执行复杂的SQL语句来获取查询

 

InnoDB存储引擎一般都使用于OLTP的数据库应用:

用户操作的并发量大

事务处理的时间一般比较短

查询的语句较简单,一般都走索引

复杂的查询较少

 

OLAP是CPU密集型的操作

OLTP是IO密集型的操作

 

采购设备时要注意提高IO的配置

 

如果CPU支持多核,InnoDB Plugin是更好的选择。另外,如果你的CPU是多核,可以通过改变参数innodb_read_io_threads和innodb_write_io_threads来增大IO的线程,这样也能更充分利用CPU的多核性能。


 

(2)内存的重要性

6.png

7.png


 

(3)硬盘对数据库性能的影响

传统机械硬盘

固态硬盘

(4)合理地设置RAID

RAID基本思想:就是把多个相对便宜的磁盘组合起来,成为一个磁盘数组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。

RAID的作用是:

增强数据集成度

增强容错功能

增加处理量或容量

8.png

9.png

10.png

11.png

12.png


 

(5)操作系统的选择也很重要

(6)不同文件系统对数据库性能的影响

(7)选择合适的基准测试工具

MySQL提供了一些比较优秀的工具:sysbench和mysql-tpcc

 



3、Linux的大小写
Linux下mysql安装完后是默认:
1、区分表名的大小写,不区分列名的大小写;
2、用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写;
lower_case_table_names参数详解:lower_case_table_names = 0其中 0:区分大小写,1:不区分大小写。
MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:
1、数据库名与表名是严格区分大小写的;
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
MySQL在Windows下都不区分大小写。
3、如果想在查询时区分字段值的大小写,则:字段值需要设置BINARY属性,设置的方法有多种:
A、创建时设置:
CREATE TABLE T(A VARCHAR(10) BINARY);
B、使用alter修改:

ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;


C、mysql table editor中直接勾选BINARY项。


在Linux环境中的MySQL默认设置下,数据库和表名是区分大小写的,但在Windows中,MySQL的数据库和表名是不区分大小写的。
(1)在任何系统中可以使用lower_case_tables_name=1。使用该选项的不利之处是当使用SHOW TABLES或SHOW DATABASES时,看不出名字原来是用大写还是小写。
(2) 在Linux中使用lower_case_tables_name=0,在Windows中使用lower_case_tables_name=2。这样了可以保留数据库名和表名的大小写。不利之处是必须确保在Windows中查询总是用正确大小写引用数据库名和表名。如果将查询转移到Linux中,由于在Linux中大小写很重要,如果大小写不正确,它们不工作。
例外:如果使用InnoDB表,在任何平台上均应将lower_case_tables_name设置为1,以强制将名转换为小写。
请注意在Linux中将lower_case_tables_name设置为1之前,重启mysqld之前,必须先将旧的数据库名和表名转换为小写。


点赞

发表评论