需求:根据当前客户的生产环境,模拟安装部署一套MySQL主主+Keepalived架构的测试环境,方便后续自己做一些功能性的测试。

1.准备工作

MySQL、Keepalived的具体版本,虚拟主机等配置,都尽可能参考客户目前的生产环境安装规范来准备:

软件名称 版本
MySQL 5.7.29
Keepalived 2.0.20

准备2台虚拟主机,具体环境信息为:

系统版本 主机名 IP地址 主机内存 磁盘空间
RHEL6.8 test01 192.168.1.121 4G 20G
RHEL6.8 test02 192.168.1.122 4G 20G

规划业务连接的vip为:192.168.1.130

MySQL软件下载地址:https://downloads.mysql.com/archives/community/

Keepalived软件下载地址:https://www.keepalived.org/download.html

我这里自己的测试环境可以连接到外网,可以直接wget放到后台下载

比如统一进入到介质存放目录/u01/media下,使用wget下载对应介质:

  1. cd /u01/media
  2. nohup wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz --no-check-certificate &
  3. nohup wget https://www.keepalived.org/software/keepalived-2.0.20.tar.gz &

实测wget下载MySQL需要加--no-check-certificate参数,不加会下载失败,提示信息为Unable to establish SSL connection.

根据客户模版编辑my.cnf配置文件,存放路径为:/etc/mysql/my.cnf

my.cnf内容,这里也是完全引用当前客户MySQL的安装规范,如果后续测试验证有涉及到个别参数的调整,会特别注明:

  1. #################################
  2. ## my.cnf for MySQL 5.7/8.0
  3. #
  4. #以下内容需要修改:
  5. #1)prompt="\u@mysqldb \R:\m:\s [\d]> " 【mysqldb可修改为业务系统名称】
  6. #2)character-set-server = utf8mb4 默认,有特殊要求可修改为GBK,但不建议
  7. #3)innodb_buffer_pool_size = 1024M 设置mysql总内存大小,可使用物理内存3/5(我这里测试环境还有其他测试软件运行,所以设置为1024M)
  8. #4)server-id = 1121 确保主从或主主各个节点不同,规则可考虑使用ip地址后两段,如192.168.1.121 server-id=1121
  9. #
  10. #################################
  11. [client]
  12. port = 3306
  13. socket = /data/mysql/mysql.sock
  14. [mysql]
  15. prompt="\u@mysqldb \R:\m:\s [\d]> "
  16. no-auto-rehash
  17. [mysqld]
  18. user = mysql
  19. port = 3306
  20. basedir = /usr/local/mysql
  21. datadir = /data/mysql
  22. socket = /data/mysql/mysql.sock
  23. pid-file = mysqldb.pid
  24. character-set-server = utf8mb4
  25. skip_name_resolve = 1
  26. #若你的MySQL数据库主要运行在境外,请务必根据实际情况调整本参数
  27. default_time_zone = "+8:00"
  28. open_files_limit = 65535
  29. back_log = 1024
  30. max_connections = 800
  31. max_connect_errors = 1000000
  32. table_open_cache = 1024
  33. table_definition_cache = 1024
  34. table_open_cache_instances = 64
  35. thread_stack = 512K
  36. external-locking = FALSE
  37. max_allowed_packet = 32M
  38. sort_buffer_size = 16M
  39. join_buffer_size = 16M
  40. thread_cache_size = 768
  41. interactive_timeout = 600
  42. wait_timeout = 600
  43. tmp_table_size = 96M
  44. max_heap_table_size = 96M
  45. slow_query_log = 1
  46. log_timestamps = SYSTEM
  47. slow_query_log_file = /data/mysql/slow.log
  48. log-error = /data/mysql/error.log
  49. long_query_time = 0.1
  50. log_queries_not_using_indexes =1
  51. log_throttle_queries_not_using_indexes = 60
  52. min_examined_row_limit = 100
  53. log_slow_admin_statements = 1
  54. log_slow_slave_statements = 1
  55. server-id = 1121
  56. log-bin = /data/mysql/mybinlog
  57. sync_binlog = 1
  58. binlog_cache_size = 4M
  59. max_binlog_cache_size = 2G
  60. max_binlog_size = 1G
  61. auto-increment-increment = 2
  62. auto-increment-offset = 1
  63. #注意:MySQL 8.0开始,binlog_expire_logs_seconds选项也存在的话,会忽略expire_logs_days选项
  64. expire_logs_days = 7
  65. master_info_repository = TABLE
  66. relay_log_info_repository = TABLE
  67. gtid_mode = on
  68. enforce_gtid_consistency = 1
  69. log_slave_updates
  70. slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
  71. binlog_format = row
  72. binlog_checksum = 1
  73. relay_log_recovery = 1
  74. relay-log-purge = 1
  75. key_buffer_size = 32M
  76. read_buffer_size = 8M
  77. read_rnd_buffer_size = 16M
  78. bulk_insert_buffer_size = 64M
  79. myisam_sort_buffer_size = 128M
  80. myisam_max_sort_file_size = 10G
  81. myisam_repair_threads = 1
  82. lock_wait_timeout = 3600
  83. explicit_defaults_for_timestamp = 1
  84. innodb_thread_concurrency = 0
  85. innodb_sync_spin_loops = 100
  86. innodb_spin_wait_delay = 30
  87. #transaction_isolation = REPEATABLE-READ
  88. transaction_isolation = READ-COMMITTED
  89. sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
  90. #innodb_additional_mem_pool_size = 16M
  91. innodb_buffer_pool_size = 1024M
  92. innodb_buffer_pool_instances = 4
  93. innodb_buffer_pool_load_at_startup = 1
  94. innodb_buffer_pool_dump_at_shutdown = 1
  95. innodb_data_file_path = ibdata1:1G:autoextend
  96. innodb_flush_log_at_trx_commit = 1
  97. innodb_log_buffer_size = 32M
  98. innodb_log_file_size = 2G
  99. innodb_log_files_in_group = 2
  100. innodb_max_undo_log_size = 4G
  101. innodb_undo_directory = /data/mysql/undolog
  102. innodb_undo_tablespaces = 95
  103. # 根据您的服务器IOPS能力适当调整
  104. # 一般配普通SSD盘的话,可以调整到 10000 - 20000
  105. # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
  106. innodb_io_capacity = 4000
  107. innodb_io_capacity_max = 8000
  108. innodb_flush_sync = 0
  109. innodb_flush_neighbors = 0
  110. innodb_write_io_threads = 8
  111. innodb_read_io_threads = 8
  112. innodb_purge_threads = 4
  113. innodb_page_cleaners = 4
  114. innodb_open_files = 65535
  115. innodb_max_dirty_pages_pct = 50
  116. innodb_flush_method = O_DIRECT
  117. innodb_lru_scan_depth = 4000
  118. innodb_checksum_algorithm = crc32
  119. innodb_lock_wait_timeout = 10
  120. innodb_rollback_on_timeout = 1
  121. innodb_print_all_deadlocks = 1
  122. innodb_file_per_table = 1
  123. innodb_online_alter_log_max_size = 4G
  124. innodb_stats_on_metadata = 0
  125. innodb_undo_log_truncate = 1
  126. # some var for MySQL 5.7
  127. innodb_checksums = 1
  128. #innodb_file_format = Barracuda
  129. #innodb_file_format_max = Barracuda
  130. query_cache_size = 0
  131. query_cache_type = 0
  132. innodb_undo_logs = 128
  133. #注意:MySQL 8.0.16开始删除该选项
  134. internal_tmp_disk_storage_engine = InnoDB
  135. innodb_status_file = 1
  136. #注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
  137. innodb_status_output = 0
  138. innodb_status_output_locks = 0
  139. #performance_schema
  140. performance_schema = 1
  141. performance_schema_instrument = '%memory%=on'
  142. performance_schema_instrument = '%lock%=on'
  143. #innodb monitor
  144. innodb_monitor_enable="module_innodb"
  145. innodb_monitor_enable="module_server"
  146. innodb_monitor_enable="module_dml"
  147. innodb_monitor_enable="module_ddl"
  148. innodb_monitor_enable="module_trx"
  149. innodb_monitor_enable="module_os"
  150. innodb_monitor_enable="module_purge"
  151. innodb_monitor_enable="module_log"
  152. innodb_monitor_enable="module_lock"
  153. innodb_monitor_enable="module_buffer"
  154. innodb_monitor_enable="module_index"
  155. innodb_monitor_enable="module_ibuf_system"
  156. innodb_monitor_enable="module_buffer_page"
  157. innodb_monitor_enable="module_adaptive_hash"
  158. [mysqldump]
  159. quick
  160. max_allowed_packet = 32M

2.MySQL安装部署

2.1 MySQL解压、初始化:

  1. cd /u01/media
  2. tar -zxf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
  3. mv mysql-5.7.29-linux-glibc2.12-x86_64 /usr/local/mysql5.7
  4. ln -s /usr/local/mysql5.7 /usr/local/mysql
  5. mkdir -p /data/mysql
  6. chmod 755 /data
  7. useradd -u 3001 mysql
  8. chown -R mysql:mysql /data
  9. chown -R root:mysql /usr/local/mysql5.7
  10. /usr/local/mysql/bin/mysqld --defaults-file=/etc/mysql/my.cnf --initialize --datadir=/data/mysql --basedir=/usr/local/mysql --user=mysql --explicit_defaults_for_timestamp

2.2 启动MySQL服务:

  1. /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/mysql/my.cnf &

2.3 配置MySQL启动脚本:

  1. #拷贝启动脚本
  2. cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
  3. #定义basedir和datadir的路径
  4. vi /etc/init.d/mysqld
  5. basedir=/usr/local/mysql
  6. datadir=/data/mysql
  7. #将MySQL加入服务列表,并设置为开机启动:
  8. chkconfig --add mysqld
  9. chkconfig mysqld on
  10. #检查是否生效(2,3,4,5为on)
  11. chkconfig --list mysqld

2.4 修改MySQL的root密码:

  1. # MySQL 5.7 初始化时生成临时的密码可在日志中查找:
  2. # grep temporary /data/mysql/error.log
  3. # 登录MySQL修改密码:
  4. # mysql -uroot -p
  5. mysql> alter user 'root'@'localhost' identified by '123';
  6. mysql> flush privileges;

注:如果mysql命令不识别,需要将环境变量/usr/local/mysql/bin追加到/etc/profile中的PATH变量中:

  1. export PATH="$PATH:/usr/local/redis/bin:/usr/local/mysql/bin"

3.MySQL主主配置

基本的 my.cnf 参数文件、密码设置已经在之前步骤配置完成,下面直接进行MySQL主主配置:

3.1 配置Master1服务器(121)

  1. grant replication slave, replication client on *.* to 'repl'@'192.168.1.%' identified by "123";
  2. flush privileges;
  3. flush tables with read lock; /* 注意该参数设置后,如果自己同步对方数据,同步前一定要记得先解锁!*/
  4. show master status;

结果如下:

  1. root@mysqldb 21:30: [(none)]> show master status;
  2. +-----------------+----------+--------------+------------------+------------------------------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +-----------------+----------+--------------+------------------+------------------------------------------+
  5. | mybinlog.000002 | 1035 | | | 08c887bf-98ab-11ea-b70c-080027c2997a:1-4 |
  6. +-----------------+----------+--------------+------------------+------------------------------------------+
  7. 1 row in set (0.00 sec)

3.2 配置Master2服务器(122)

  1. grant replication slave, replication client on *.* to 'repl'@'192.168.1.%' identified by "123";
  2. flush privileges;
  3. flush tables with read lock; /* 注意该参数设置后,如果自己同步对方数据,同步前一定要记得先解锁!*/
  4. show master status;

结果如下:

  1. root@mysqldb 21:31: [(none)]> show master status;
  2. +-----------------+----------+--------------+------------------+------------------------------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +-----------------+----------+--------------+------------------+------------------------------------------+
  5. | mybinlog.000002 | 1035 | | | 5d3f3359-98ab-11ea-8101-080027763d24:1-4 |
  6. +-----------------+----------+--------------+------------------+------------------------------------------+
  7. 1 row in set (0.00 sec)

3.3 Master1 => Master2方向同步

在master1(121)上做以下操作,注意master_host输入master2地址,以及master2的show master status信息:

  1. mysql -uroot -p'123'
  2. unlock tables; /*先解锁,将对方数据同步到自己的数据库中*/
  3. stop slave;
  4. change master to master_host='192.168.1.122', master_user='repl', master_password='123', master_log_file='mybinlog.000002', master_log_pos=1035;
  5. start slave;

查看同步状态,如下出现两个“Yes”,表明同步成功:

  1. show slave status\G
  2. ...
  3. Slave_IO_Running: Yes
  4. Slave_SQL_Running: Yes

3.4 Master2 => Master1方向同步

在master2(122)上做以下操作,注意master_host输入master1地址,以及master1的show master status信息:

  1. mysql -uroot -p'123'
  2. unlock tables; /*先解锁,将对方数据同步到自己的数据库中*/
  3. stop slave;
  4. change master to master_host='192.168.1.121', master_user='repl', master_password='123', master_log_file='mybinlog.000002', master_log_pos=1035;
  5. start slave;

查看同步状态,如下出现两个“Yes”,表明同步成功:

  1. show slave status\G
  2. ...
  3. Slave_IO_Running: Yes
  4. Slave_SQL_Running: Yes

3.5 验证主主同步正常

在master1(121)上创建一个测试库test121;创建表t1,插入一条数据,然后去master2(122)查询确认同步;

在master2(122)上创建一个测试库test122;创建表t1,插入一条数据,然后去master1(121)查询确认同步。

  1. --在master1(121)上:
  2. create database test121;
  3. use test121;
  4. create table t1 (id int, name varchar(20));
  5. insert into t1 values (1,'Alfred Zhao on 121');
  6. --在master2(122)上:
  7. create database test122;
  8. use test122;
  9. create table t1 (id int, name varchar(20));
  10. insert into t1 values (1,'Alfred Zhao on 122');
  11. --在master1(121)上查询test122库中T1表;
  12. 存在。
  13. --在master2(122)上查询test121库中T1表;
  14. 存在。

4.Keepalived安装部署

4.1 安装keepalived软件

需要准备的系统依赖包:

  1. gcc
  2. libnl-1.1.4-2.el6.x86_64
  3. libnl-devel-1.1.4-2.el6.x86_64
  4. libnfnetlink-1.0.0-1.el6.x86_64
  5. libnfnetlink-devel-1.0.0-1.el6.x86_64
  6. openssl-devel-1.0.1e-58.el6_10.x86_64

配置好yum源,使用yum install安装对应的包。

  1. yum install gcc libnl libnl-devel libnfnetlink libnfnetlink-devel openssl-devel

4.2 编译安装keepalived

解压及配置:

  1. tar -xvf keepalived-2.0.20.tar.gz
  2. mv keepalived-2.0.20 /usr/local/src/
  3. cd /usr/local/src/keepalived-2.0.20
  4. ./configure --prefix=/usr/local/keepalived

编译安装:

  1. make&&make install

4.3 配置keepalived服务

  1. 配置服务文件
  1. mkdir /etc/keepalived
  2. cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
  3. cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  4. cp /usr/local/keepalived/sbin/keepalived /usr/sbin
  5. cp /usr/local/src/keepalived-2.0.20/keepalived/etc/init.d/keepalived /etc/rc.d/init.d/keepalived
  1. 加keepalived服务
  1. chkconfig --list |grep keepalived
  2. chkconfig --add keepalived
  3. chkconfig keepalived on

配置keepalived日志

keepalived的日志默认是输出到/var/log/messages中,这样不便于查看。如何自定义keepalived的日志输出文件呢?

如果是用service启动的,修改/etc/sysconfig/keepalived文件

vi /etc/sysconfig/keepalived

  1. KEEPALIVED_OPTIONS="-D -d -S 0"

如果不是,则启动的时候指定以上参数,如:

  1. /usr/local/keepalived/sbin/keepalived -d -D -S 0

修改/etc/syslog.conf(RHEL6.8以后配置/etc/rsyslog.conf)

  1. # keepalived -S 0
  2. local0.* /var/log/keepalived.log

重启syslog:

  1. # RHEL 5&6:
  2. service syslog restart
  3. # RHEL 7:
  4. service rsyslog restart

注:RHEL6.8也是按照RHEL7的方法来操作。

  1. 配置keepalived的MySQL故障转移

    master1(121)机器上的keepalived.conf配置:

    注:下面配置中没有使用lvs的负载均衡功能,所以不需要配置虚拟服务器virtual server
  1. cd /etc/keepalived/
  2. mv keepalived.conf keepalived.conf.bak
  3. vi /etc/keepalived/keepalived.conf
  4. ! Configuration File for keepalived
  5. vrrp_script chk_mysql_port {
  6. script "/etc/keepalived/check_mysql.sh"
  7. interval 2
  8. weight -5
  9. fall 2
  10. rise 1
  11. }
  12. vrrp_instance VI_1 {
  13. state MASTER
  14. interface eth0 #指定虚拟ip的网卡接口
  15. mcast_src_ip 192.168.1.121 #指定本服务器物理ip地址
  16. virtual_router_id 130 #路由器标识,MASTER和BACKUP必须是一致的,取值1-255,注意同一内网中不应有相同virtual_router_id的集群,可以考虑使用vip的最后一位进行标示。
  17. priority 101
  18. advert_int 1
  19. authentication {
  20. auth_type PASS
  21. auth_pass 888888
  22. }
  23. virtual_ipaddress {
  24. 192.168.1.130 #指定虚拟ip地址
  25. }
  26. track_script {
  27. chk_mysql_port
  28. }
  29. }

编辑 /etc/keepalived/check_mysql.sh

vi /etc/keepalived/check_mysql.sh

  1. #!/bin/bash
  2. counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
  3. if [ "${counter}" -eq 0 ]; then
  4. /etc/init.d/keepalived stop
  5. fi
  6. # 修改chk_mysql.sh权限
  7. chmod 755 /etc/keepalived/check_mysql.sh
  8. # 启动keepalived
  9. # service keepalived start
  10. Starting keepalived: [ OK ]

master2(122)机器上的keepalived.conf配置:

  1. cd /etc/keepalived/
  2. mv keepalived.conf keepalived.conf.bak
  3. vi /etc/keepalived/keepalived.conf
  4. ! Configuration File for keepalived
  5. vrrp_script chk_mysql_port {
  6. script "/etc/keepalived/check_mysql.sh"
  7. interval 2
  8. weight -5
  9. fall 2
  10. rise 1
  11. }
  12. vrrp_instance VI_1 {
  13. state BACKUP
  14. interface eth0
  15. mcast_src_ip 192.168.1.122
  16. virtual_router_id 130
  17. priority 99
  18. advert_int 1
  19. authentication {
  20. auth_type PASS
  21. auth_pass 888888
  22. }
  23. virtual_ipaddress {
  24. 192.168.1.130
  25. }
  26. track_script {
  27. chk_mysql_port
  28. }
  29. }

编辑check_mysql.sh

vi /etc/keepalived/check_mysql.sh

  1. #!/bin/bash
  2. counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
  3. if [ "${counter}" -eq 0 ]; then
  4. /etc/init.d/keepalived stop
  5. fi
  1. chmod 755 /etc/keepalived/check_mysql.sh

启动keepalived:

  1. # service keepalived start
  2. Starting keepalived: [ OK ]

5.其他补充

5.1 查看keepalived日志:

  1. tail -200f /var/log/keepalived.log

5.2 创建数据库、用户并赋权

  1. --创建业务数据库:
  2. create database demo;
  3. --创建业务用户:
  4. create user 'jingyu'@'%' identified by 'jingyu';
  5. --赋予业务用户权限(默认):
  6. grant insert,update,delete,select,alter,create,index,SHOW VIEW on demo.* to 'jingyu'@'%';

此时应用侧已经可以使用命令mysql -ujingyu -p -h192.168.1.130或者客户端连接工具,登录到demo数据库进行相关操作了。

  1. [root@test01 ~]# mysql -ujingyu -p -h192.168.1.130
  2. Enter password:
  3. Welcome to the MySQL monitor. Commands end with ; or \g.
  4. Your MySQL connection id is 27
  5. Server version: 5.7.29-log MySQL Community Server (GPL)
  6. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
  7. Oracle is a registered trademark of Oracle Corporation and/or its
  8. affiliates. Other names may be trademarks of their respective
  9. owners.
  10. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  11. jingyu@mysqldb 00:00: [(none)]> show databases;
  12. +--------------------+
  13. | Database |
  14. +--------------------+
  15. | information_schema |
  16. | demo |
  17. +--------------------+
  18. 2 rows in set (0.01 sec)

MySQL主主+Keepalived架构安装部署的更多相关文章

  1. [MySQL] MySQL的自己主动化安装部署

    有过MySQL运维的人应该都清楚,线上的MySQL一般都採用源代码编译,由于这样才干够依据企业的各自须要选择要编译的功能,尽管MySQL的源代码编译挺简单的,可是试想一下,假设你有几百台server同 ...

  2. node.js express架构安装部署

    安装-g:表示全局安装(必须以安装node.js) npm install -g express-generator 创建一个express架构的项目文件夹express testWebApp 在pa ...

  3. MySQL 5.7 多实例安装部署实例

    1. 背景  MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务.各个实例之间是相互独立的,每个实例的dat ...

  4. LNMP 架构安装部署

    PHP 安装 LNMP 下 php 在 Apache 服务下是 libphp5.so nginx 服务下是 9000 端口 #确保 web 服务和 MySQL 正常 143 [root@oldboy ...

  5. MySQL高可用之PXC安装部署(续)

      Preface       Yesterday I implemented a three-nodes PXC,but there were some errors when proceeding ...

  6. MySQL高可用之PXC安装部署

      Preface       Today,I'm gonna implement a PXC,Let's see the procedure.   Framework   Hostname IP P ...

  7. hadoop HA架构安装部署(QJM HA)

    ###################HDFS High Availability Using the Quorum Journal Manager########################## ...

  8. MySQL 5.7 双主复制+keepalived,常规业务一般够用了

    业务需求: 为Zabbix搭建2个数据库,一个库给服务器监控用,一个库给网络监控用. 硬件: 两台服务器,硬盘是1.2 T SSD卡,内存128G 架构: 希望做双主复制+keepalived,架构大 ...

  9. linux安装部署Nginx

    两个参考地址: NGINX的百度百科:https://baike.baidu.com/item/nginx/3817705?fr=aladdin NGINX的中文网站:http://www.nginx ...

  10. 【Hadoop离线基础总结】oozie的安装部署与使用

    目录 简单介绍 概述 架构 安装部署 1.修改core-site.xml 2.上传oozie的安装包并解压 3.解压hadooplibs到与oozie平行的目录 4.创建libext目录,并拷贝依赖包 ...

随机推荐

  1. 六、docker数据卷

    系列导航 一.docker入门(概念) 二.docker的安装和镜像管理 三.docker容器的常用命令 四.容器的网络访问 五.容器端口转发 六.docker数据卷 七.手动制作docker镜像 八 ...

  2. 【调试】kdump原理及其使用方法

    kdump机制 简介 Kdump是在系统崩溃.死锁或死机时用来转储内存运行参数的一个工具和服务,是一种新的crash dump捕获机制,用来捕获kernel crash(内核崩溃)的时候产生的cras ...

  3. vue项目部署的最佳实践

    前言 使用vue.react.angular等技术开发过程中,我们都会遇到以下问题: 首屏加载慢 每一次更新都需要清除浏览器缓存才能看到效果(经常被测试吐槽) 这两个问题可以从很多方面进行优化,今天我 ...

  4. hdu 5234

    题意:求在不超过k的情况下,最多可以得到多少价值. 三维dp,结合01背包,第三维就是用来保存在不同的背包容量下能得到的最大价值,也就是第三维有很多状态. #include<iostream&g ...

  5. python3查看文件是否存在,以及读、写与执行的属性

    技术背景 在使用python对系统文件进行操作的项目中,经常需要用到对本地文件的存在和读写进行判断的操作.最常用的比如os.exists函数,可以很方便的判断给定的文件名是否存在于系统中.但是这里我们 ...

  6. 【BUS】动画图解嵌入式常见的通讯协议:SPI、I²C、UART、红外 ......

    SPI传输 SPI数据传输 SPI数据传输 SPI时序信号 I2C传输 2C总线寻址 UART传输 PC-UART-MCU RS-232电平转换 红外控制 红外通信 红外信号接收.放大.整形 红外控制 ...

  7. java - for循环 排序数组 - 求数组最小值

    主要是利用静态变量存储 public class Bubble2 { static int minNumber; public static void main(String[] args) { in ...

  8. Android——共享参数SharedPreferences

    4数据存储 共享参数SharedPreferences.数据库SQLite.SD卡文件.App的全局内存 4.1共享参数SharedPreferences SharedPreferences是一个轻量 ...

  9. [转帖]为什么 Java 内部使用 UTF-16 表示字符串?

    https://www.jianshu.com/p/957b249a02d8 背景 许多年前 Unicode 的提出者天真地以为 16 位定长的字符可以容纳地球上所有仍具活力的文字,Java 设计者也 ...

  10. [转帖]聊聊redis的slowlog与latency monitor

    https://www.jianshu.com/p/95a9ce63ddb2 序 本文主要研究一下redis的slowlog与latency monitor slowlog redis在2.2.12版 ...