安装配置mysql:双主双从---数据库的日志文件

192.168.68.160、192.168.68.162  互为主从关系
192.168.68.163、192.168.68.164  从库
安装数据库:

yum install mariadb mariadb-server -y
修改my.cnf配置文件:
vim /etc/my.cnf
    server-id=1  #每台数据库的id不能相同!!
    log-bin=mysql-bin
    relay-log=relay-log

开启数据库:

systemctl enable mariadb    #开机自启
systemctl start mariadb     #启动

在192.168.68.160、192.168.68.162:操作互为主从
mysql 中查看 mysql 二进制日志信息并授权:
192.168.68.160部署:

MariaDB [(none)]> show master status;
+-----------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| mysql-bin.00004 |      245 |				|				   |
+-----------------+----------+--------------+------------------+

MariaDB [(none)]> grant all on *.* to lzg@'%' identified by '123456';																	'
MariaDB [(none)]> stop slave;
MariaDB [(none)]> change master to master_host='192.168.68.162',master_user='lzg',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=255;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status \G;
    显示下方为双Yes则主从配置成功:
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

192.168.68.162 部署:

MariaDB [(none)]> show master status;
+-----------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| mysql-bin.00003 |      255 |				|				   |
+-----------------+----------+--------------+------------------+

MariaDB [(none)]> grant all on *.* to lzg@'%' identified by '123456';															'
MariaDB [(none)]> stop slave;
MariaDB [(none)]> change master to master_host='192.168.68.100',master_user='lzg',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status \G;
    显示下方为双Yes则主从配置成功:
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

部署高可用:keepalived

yum install keepalived -y

修改keepalived.conf配置文件:

! Configuration File for keepalived
  
global_defs {
     
  # Keepalived process identifier
  lvs_id haproxy_DH
}
  
# Script used to check if HAProxy is running
vrrp_script check_mysql {
     
  script "pidof mysqld"
  interval 2
  weight 20}
 
# Virtual interface br-OAM
# The priority specifies the order in which the assigned interface to take over in a failover
vrrp_instance mysql {
     
  state BACKUP
  interface ens33
  virtual_router_id 98
   priority 10
  # The virtual ip address shared between the two loadbalancers
  virtual_ipaddress {
     
     192.168.68.100/24
   }
   track_script {
     
    check_mysql
  }
} 

启动keepalived:

systemctl enable keepalived    #开机自启
systemctl start keepadived    #启动 

测试是否成功启动VIP:

inet 192.168.68.100/24 scope global secondary ens33

安装部署从库: 192.168.68.163、192.168.68.164

yum install mariadb mariadb-server -y

修改 my.cnf 配置文件:

vim /etc/my.cnf
    server-id=1
    log-bin=mysql-bin
    relay-log=relay-log 

启动数据库:

systemctl enable mariadb    #开机自启
systemctl start mariadb     #启动

在192.168.68.163、192.168.68.164 mysql 授权:

MariaDB [(none)]> stop slave;
MariaDB [(none)]> change master to master_host='192.168.68.100',master_user='lzg',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=245;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status \G;
    显示下方为双Yes则主从配置成功:
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

开启mysql查询缓存:
方法一:{  修改配置文件:

vim /etc/my.cnf

[mysqld]
query_cache_type = 1
query_cache_size = 100000

}
修改之后需要重启mysql才能生效。
方法二:{  Sql命令式修改

mysql> set global query_cache_type=1;
mysql> set global_cache_size=200000;<br>mysql> show variables like '%query_cache%';

+-------------------------------+---------+
| Variable_name                 | Value   |
+-------------------------------+---------+
| have_query_cache              | YES     | 
| query_cache_limit             | 1048576 | 
| query_cache_min_res_unit      | 4096    |
| query_cache_size       		| 199680  |
| query_cache_type              | NO      |
| query_cache_wlock_invalidate  | OFF     |
+-------------------------------+---------+

}

mysql> show variables like '%query_cache%';

+-------------------------------+---------+
| Variable_name                 | Value   |
+-------------------------------+---------+
| have_query_cache              | YES     | 
| query_cache_limit             | 1048576 | 
| query_cache_min_res_unit      | 4096    |
| query_cache_size       		| 199680  |
| query_cache_type              | NO      |
| query_cache_wlock_invalidate  | OFF     |
+-------------------------------+---------+

数据库慢查询日志:

修改参数:

# vi /etc/my.cnf
    [mysqld]
    slow_query_log = 1
    long_query_time = 1
# service mysqld restart

临时配置开启:

mysql> set  global  slow_query_log='ON';

设置日志存放目录:

mysql> set  slow_query_log_file='/var/lib/mysql/mysql-slow.log';

设置时间:

mysql> set  long_query_time=0.1;  

查看具体信息:

mysql> show variables like '%quer%';

+-------------------------------+---------------------------------+
| Variable_name                 | Value                           |
+-------------------------------+---------------------------------+
| ft_query_expansion_limit      | 20                              |
| have_query_cache              | YES                             |
| log_queries_not_using_indexes | OFF                             |
| log_slow_queries       		| OFF                             |
| long_query_time               | 0.100000                        |
| query_alloc_block_size        | 8192                            |
| query_cache_limit             | 1048576                         |
| query_cache_min_res_unit      | 4096                            |
| query_cache_size       		| 0                               |
| query_cache_type              | ON                              |
| query_cache_wlock_invalidate  | OFF                             |
| query_prealloc_size           | 8192                            |
| slow_query_log                | OFF                             |
| slow_query_log_file           | /var/run/mysqld/mysqld-slow.log |
+-------------+-----------------+---------------------------------+

可以使用mysqldumpslow进行分析对慢查询日志。或者直接cat等进行查看!!!!
验证:

mysql> select sleep(10);

之后去存储日志目录查看是否生成即可。

修改数据库字符集:

#查看当前数据库所支持的字符集:
mysql> show charset;
#查询当前字符编码:
mysql> show  variables  like%char%;

+---------------------------+-----------------------------+
| Variable_name             | Value                       |
+---------------------------+-----------------------------+
| character_set_client      | latin1                      |
| character_set_connection  | latin1                      |
| character_set_dayabase    | latin1                      |
| character_set_filesystem  | binary                      |
| character_set_results     | latin1                      |
| character_set_server      | latin1                      |
| character_set_system      | utf8                        |
| character_sets_dir        | /usr/share/mysql/charsets/  |
+-------------+--------------+----------------------------+

参数说明:

character_set_client:客户端请求数据的字符集。
character_set_connection:从客户端接收到数据,然后传输的字符集。
character_set_database:默认数据库的字符集,无论默认数据库如何改变,都是这个字符集;如果没有默认数据库,使character_set_server指定的字符集,此参数无需设置。
character_set_filesystem:把操作系统上文件名转化成此字符集,即把character_set_client转换character_set_filesystem,默认binary即可。
character_set_results:结果集的字符集。
character_set_server:数据库服务器的默认字符集。
character_set_system:这个值总是utf8,不需要设置,存储系统元数据的字符集。
单独修改当前表的字符集:
mysql> alter table 表名 convert to character set utf8;
查看表的字符集:
mysql> show table status from 库名 like 表名;
查看表中所有列的字符集:
mysql> show full columns from 表名;
设置字符集
设置字符集一般有两种方法,一种是在创建表的时候设置字符集,另一种是表建成之后修改字符集。
创建库的时候指定字符集:
mysql> create  database  库名  default character set=字符集;
或者
mysql> create  database  wg charset utf8;
mysql> create database db2 default character set=utf8;
创建表的时候指定字符集:
mysql> create  table  表名(属性) default character set=字符集;
mysql> create table test1(id int(6),name char(10)) default character set = 'gbk';
修改库的字符集:
mysql> alter database 库名 default character set 字符集;
mysql> alter database shiyan default character set gbk;
查看:
mysql> show create database shiyan\G
修改单独库的字符集:
mysql> alter database  数据库名  default  character  set  utf8;
修改表的字符集:
mysql> alter table test1 convert to character set utf8;
查看
mysql> show create table test1\G
修改字段的字符集:
mysql>  alter table test1 modify name char(10) character set gbk;
mysql>  show full columns from test1;

永久修改方式,修改配置文件修改:

vim  /etc/my.cnf

[mysqld]
default-character-set = utf8
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8  

数据库的原理是:

1、两个线程,一个I/O线程,一个SQL线程, i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
2、主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
3SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

数据库的引擎是啥,有啥区别:

1、MyISAM用一个变量保存了整个表的行数,InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。MylSAM执行上述语句时只需要读出该变量即可,速度很快。    
2、MyISAM支持全文索引,Innodb不支持全文索引,查询效率上MyISAM要高。
3innodb支持事务,MyISAM不支持事务,
4、如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读写也挺频繁,请使用InnoDB。系统奔溃后,MyISAM恢复起来更困难。

数据库延迟是如何产生的:

复制代码
master可以并发,Slave_SQL_Running线程却不可以。
当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,当然还有就是可能与slave的大型query语句产生了锁等待。
TPS :  是一台数据库服务器每秒处理的事务的个数。
DDL:数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。
因素:
1、从库的配置往往没有主库的配置高
2、主库支持并发写入,而5.7之前的版本上从库只有单线程SQL来完成任务。
3、MySQL主从之间的同步,并不是完全的实时同步,而是主库提交事务之后,从库才再来执行一遍
4、主库上的表的某个列没有索引,然后对这个列进行deleteupdate操作
5、网络问题,往返时延RTT较大。 

主库宕机:

1、确保所有的relay log全部更新完毕,在每个从库上执行show processlist
2、更新完毕后,登录所有从库查看master.info文件,对比选择pos最大的作为新的主库,
3、然后登录这个新的主库,执行stop slave;进入主目录,删除master.Info和relay-log.info配置my.cnf文件开启log-bin文件
4、创建用于同步的用户并授权slave
5、登录另外一台从库,执行stop slave停止同步
6、执行start slave
7、修改新的master数据,测试slave是否同步更新

从库宕机:

1、查看从库上mysql的错误日志,里面有记录主从挂掉时的binlog信息。
2、有了binlog和postion信息后,只需要重新在从库上进行change master to配置即可。配置后开启slave状态,没有报错
3、查看slave状态,发现slave已经正常了,开始进行延时数据恢复。 

数据库如何调优:

内核优化:根据硬件配置来进行优化 比如内存使用、TCP处理这方面的优化
配置参数的优化:我做过IO处理的常用参数、最大连接数设置、缓存使用参数的设置、慢日志的参数的设置

慢查询日志:

配置慢查询功能的方式有两种,一种是使用mysql的配置文件配置,另外一种是使用mysql命令配置。
配置文件配置:
找到[mysqld],在其下面添加如下代码即可.
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/var/localhost-slow.log
long_query_time=0 log-queries-not-using-indexes = 1
配置好后,重启mysql服务
使用命令配置:
这里就简单些一个配置项就行了,其他的配置项均按照此方法配置
mysql> set slow_query_log=ON;

你可能感兴趣的:(linux,mysql,数据库,mariadb)