Mysql Replication配置项简述(二)

八、Replication主要配置项(配置文件)

    1、log_bin:指定binlog文件的名称,同时也表示开启binlog功能,在replication模式下,master上必须开启log_bin,如果slave不需要failover,可以不开启。文件将会放置在“datadir”目录下。

 

    2、binlog_checksum:是否开启binlog校验功能,在5.6.6+之后此值默认为“CRC32”,此前版本默认为“NONE”表示不开启校验和算法;用于控制master将每个变更操作写入binlog时是否携带checksum值,使用checksum可以在replication时,slave用于校验变更操作在网络传输时是否被破坏。

 

    3、binlog_format:可选值“MIXED”、“ROW”、“STATEMENT”,在5.6版本之前默认为“STATEMENT”,5.6之后默认为“MIXED”;因为“STATEMENT”方式在处理一些“不确定”性的方法时会造成数据不一致问题,我们建议使用“MIXED”或者“ROW”。

 

    4、sync_binlog:binlog文件刷新磁盘的时机,默认为“0”,表示binlog刷新磁盘的时机有操作系统决定,“1”表示每个变更操作写入binlog后立即刷新磁盘,这是最安全的方式,在crash时最多丢失一个“group”,当然也是磁盘效率最低的一种;其他任何大于0的数字,表示“多少次”变更操作写入binlog文件后执行flush。此值越大,对磁盘IO消耗越小,当回额外消耗内存,效率越高。

 

    5、binlog_row_image:可选值“full”、“minimal”、“noblob”,默认值为“full”,对“STATEMENT”复制模式无效;每个变更操作发生时,都有2个“image”,“before”表示变更前此行所有列的值,“after”表示变更后此行所有列的值;“full”表示在binlog中将会记录before和after的全部信息,易于排错,但是会导致日志量很大,对磁盘空间和网络传输都有一定的影响;“minimal”只记录before中能够唯一标记此行的列值,比如主键或者唯一索引键,在after中只记录那些有值变更的列;“noblob”类似于full,但是不记录那些没有变更的blob或者text类型的列。

 

    默认值为“full”,因为before和after均写入了binlog,所以通常不会带来问题;如果使用minimal或noblob,我们需要首先确保所有的表都有“主键”或者“唯一索引键”,且slave和master上的表结构完全一致,这样binlog只需要在before中记录能够唯一确定此行的的列即可,否则可能会引入数据不一致的问题。

 

    6、log_slave_updates:默认值为“FALSE”,slave在读取relay log后执行变更操作时,是否也将变更操作再次保存在本地的binlog中,就像变更操作在本地发生一样,开启此特性时也需要同时开启binlog。如果你的slave后端仍有其他slave跟进,需要开启此特性;比如A<-B<-C链状模式,A是B的master,B为C的master,因此A和B需要同时开启binlog和log_slave_updates,否则C将无法正常replication。

 

    7、max_binlog_size:binlog文件的大小,单位“字节”,默认为1G;即当binlog的尺寸大于此值时,将会滚动生成新的binlog文件,但是同一个事务将不会被分割在2个binlog文件中。如果没有设定“max_relay_log_size”配置项,那么此选项也会控制relay log的大小。

 

    8、log_bin_index:binlog索引文件名称,此文件记录当前所有正在使用的binlog文件列表。默认与binlog文件名一样,只是后缀为“<binlog-filename>.index”。

 

    9、expire_logs_days:binlog文件保存的天数,超过指定天数后,binlog历史文件将被删除;默认为“0”表示“不自动删除、永久保存”。通常我们建议不修改此值,即永久保存binlog日志,以备将来一旦数据操作失误时,可以用于恢复。如果磁盘空间有限,可以将binlog备份到其他存储平台,而在本地使用“PURGE BINARY LOGS”指令清除早期的binlog历史文件,释放磁盘空间。

 

    10、master_verify_checksum:master在读取binlog时是否校验,与“binlog_checksum”对应,默认为“false”即关闭。

 

    11、innodb_flush_log_at_trx_commit:innodb表中事务写入binlog后刷新磁盘的时机,配合“sync_binlog”参数使用,默认值为“1”表示每个事务提交后立即刷新binlog文件,是目前最安全的方式。“0”表示缓存事务,每隔1秒钟(innodb_flush_log_at_timeout控制)批量写入binlog并刷新一次磁盘,当crash时这种方式不能100%保证事务全部都写入磁盘,binlog中最多会丢失1秒内的事务。“2”表示事务提交后立即写入binlog文件,每隔一秒钟刷新一次磁盘,它和“1”并没有太大区别,只不过这个方式下操作系统也会影响文件的刷新时机。

 

    12、binlog_order_commits:默认为“true”,事务提交的顺序与写入binlog的顺序保持一致,即在事务提交时会锁定binlog并写入;如果关闭此特性,事务将会并发的提交,那么binlog中事务的顺序有可能与其实际提交的顺序不同,恢复replication带来一定的影响,不过这种方式会提升一定的并发性。

 

    13、server_id:当前mysql实例的id,整个replication中所有的实例的id都不能重复,而且每个server都必须配置此选项,此值是一个数字,integer型。


    14、relay_log:relay log的文件名,建议在master和slave上均配置。

 

    15、relay_log_index:relay log索引文件名称。

 

    16、relay_log_info_repository:可选值为“FILE”、“TABLE”,用于保存slave读取relay log的位置信息,以便crash重启后继续恢复;“FILE”表示将信息写入relay-log.info文件,“TABLE”表示将信息写入mysql.slave_relay_log_info表中。

 

    14、master_info_repository:可选值“FILE”、“TABLE”,将master的状态和链接信息保存何处,FILE则表示保存在master.info文件中,TABLE表示保存在mysql.slave_master_info表中。

 

    15、slave_net_timeout:slave与master链接IO超时的时间,超时后将会中断read,默认为3600。

 

    16、slave_parallel_workers:设置执行replication的worker线程的数量,默认为0,表示关闭多线程,此时slave只有一个SQL线程。如果开启多线程,slave中的SQL线程将作为worker线程池的“协调器”,SQL线程从relay log中读取变更操作记录,并以database为分离标准将操作分发给相应的workers线程,每个worker线程在一端时间内将持续执行一个database的变更操作,简单而言,就是不同的worker线程执行不同database的操作,多个database数据将在slave上被并行的执行,为了能够正确的工作,事务不能跨多个databases。

 

    此值用于控制worker线程的个数,“协调器”线程不包含在内,我们在slave上通过“SHOW PROCESSLIST”指令可以查看到SQL线程、worker线程的数据和状态。

 

    开启多线程时,并发执行会导致,在slaves上不同的databases被执行的时机可能与master上不同,归因于线程上线文的切换和CPU资源分配的不确定性;即一个事务执行后,不能保证此事务之前的其他事务(其他databases)也已经执行成功,这或许会对slave上binlog的记录、数据恢复和客户端数据访问带来影响。建议线程数为“database个数”,每个database一个worker线程;也有很多DBA将此值设置为2,即只用一个worker线程,这就不会带来事务顺序与master不一致的问题;需要强调的是,无论多少个线程,单个database的事务总是在一个worker中执行,单个database的事务顺序总是正确的。

    参见下文“slave_preserve_commit_order”。

 

    17、slave_pending_jobs_size_max:仅对多线程有效,SQL线程将变更操作读取后分发给worker线程,每个worker线程以队列的方式缓存亟待执行的变更操作记录,此处用于控制队列的大小,默认为16M,单位为“字节”;此值不得大于“max_allowed_packet”。

 

    18、slave_sql_verify_checksum:slave中SQL线程是否使用校验和检测relay log中的变更操作,与“binlog_checksum”配合,默认为“1”表示开启。

 

    19、slave_transaction_retries:如果SQL线程在执行事务时发生InnoDB死锁且等待超时后,slave重试的次数,默认为10,如果超过此次数,slave将会抛出error且终止replication;此值在“slave_parallel_workers”开启时无效,即为0,不重试。

 

    20、sync_relay_log:slave将多少条变更操作写入relay log后刷新磁盘文件,默认为10000;“0”表示刷新时机有操作系统决定,“1”表示每写入一条变更操作即立即刷新,是最安全的方式,不过因为relay log的安全级别与binlog还是要低一些,建议保持默认值,这通常也不会带来问题。

 

    21、gtid_mode:是否开启GTID特性,可选值为“ON”、“OFF”;在replication模式下我们应该开启。

    22、enforce_gtid_consistency:如果gtid_mode=ON,此值必须开启,可选值为“ON”、“OFF”,表示是否强制gtid的“一致性”避免并发操作。

    23、binlog_ignore_db:binlog中忽略的db,master与slave均可以配置,通常在master端。如果需要ignore多个databases,此配置允许声明多次,每次指定一个db。

    24、binlog_do_db:指定可以写入binlog的database名字,与binlog_ignore_db相反,只有指定的db才会写入binlog。此配置允许声明多次,每次指定一个db。(上述两个如果在slave上配置,可能还需要开启“log_slave_updates”,默认情况下,slaves端是不写binlog的)

    25、replicate_do_db:同上,只是在slave端生效,slave中的SQL线程在读取relay log时,会检测此变更操作所属DB,SQL线程只会执行此配置参数指定的db。如果不声明replicate_do_db,表示所有的db都会执行。此配置允许声明多次,每次指定一个db。与此配置项对应的还有“replicate_ignore_db=<db>”、“replicate_db_table=<db>.<table>”、“replicate_ignore_table=<db>.<table>”。

    26、read_only:当钱实例是否为“只读”模式,在此模式下除了具有“SUPER”权限的用户外,其他权限用户均不可以修改数据。SUPER权限包括(举例):CHANGE MASTER TO、KILL、SET GLOABL等。通常slave上,需要设定read_only=1以避免客户端意外修改数据,而造成数据错乱问题。默认为“0”(OFF)表示关闭。read_only并不会影响replication进程对数据的变更。

    30、super_read_only:对于具有SUPER权限的用户,是否也只读,默认为“0”(OFF)表示关闭。super_read_onl开启时,也会隐式的开启“read_only”参数。

    31、slave_preserve_commit_order:对于多线程slaves,来保障事务在slave上执行的顺序与relay log中的顺序严格一致,只有当“slave_parallel_workers”开启时有效;此时“log_bin”、“log_slave_updates”必须开启,而且“slave_parallel_type”值必须为“LOGICAL_CLOCK”(默认值为DATABASE)。即当多线程开启时,且根据relay log中事务的逻辑顺序执行statements,是否需要严格保持顺序,默认值为0表示并发执行忽略顺序。slave_parallel_type默认为DATABASE,原理参见18、,能够确保每个DATABASE中的事务顺序严格一致,但是无法保证所有databases的事务执行顺序也是严格一致的(gap),比如两个事务依次操作了2个DB:A和B,尽管事务A、B分别被worker X、Y线程接收,但是因为线程调度的问题,有可能导致A的执行时机落后于B。如果你的事务经常是“跨DB”操作,那么可以考虑使用此参数限定顺序。当此参数开启时,这要求任何worker线程执行的事务时,只有当前事务中此之前的所有事务都执行后(被其他worker线程执行),才能执行和提交。(每个事务中,都记录了当前GTID的privious GTID,只有privious GTID被提交后,当前GTID事务才能提交)

 

九、通用配置项(配置文件):下划线的参数表示系统变量,不能在配置文件中使用

    1、bind_address:绑定的网卡ip地址,默认为“0.0.0.0”,即绑定本机的所有网卡地址;每个机器至少包括内网IP和外网IP,如果此mysql只能被内网访问,那么请绑定在内网IP上。

    2、port:绑定的端口,默认为3306。

    3、pid_file:pid文件的名称。

    4、autocommit:是否开启事务自动提交模式,默认为“1”表示开启;如果为“0”,客户端需要声明事务提交的时机,“START TRANSCATION”、“COMMIT”、“ROLLBACK”等。

 

    5、bulk_insert_buffer_size:批量INSERT时的缓冲区大小,我们经常用“INSERT INTO ...VALUES(...),(...),(...)...”使用一条INSERT插入多行记录,此值用于控制buffer的最大容量,如果超过此值insert将会被拒绝,默认为8M,单位“字节”。

 

    6、character_set_server:为了避免乱码,建议上述值以及客户端使用的编码保持一致,我们通常选用兼容域更大的字符集,比如UTF8等。

 

    7、concurrent_insert:仅对MyISAM引擎有效,表示是否支持并发插入。“0”表示禁用并发插入;“1”表示没有空洞时支持并发插入,如果有空洞,就首先填充;“2”表示总是支持并发插入,即使表文件有空洞(holes),当表正在被其他线程执行INSERT时,新的INSERT将直接在表文件尾部插入,如果没有并发,才会填充空洞。所谓空洞就是表文件中因为数据删除,而遗留下的未被使用的空间。(因为innodb使用的是聚簇索引,所以也不存在并发插入的问题,insert总是在合适的位置被插入--通常为了提高性能,主键总是自增的,即insert总是在数据文件的尾部发生)

 

    8、connect_timeout:链接超时时间,默认为10秒。

    9、datadir:数据目录。

    10、default_storage_engine:默认值为“InnoDB”,如果你的数据库不需要事务支持,可以使用“MyISAM”作为默认引擎。引擎的类型也可以在创建table时指定。

 

    11、flush:每个变更操作执行后(即写入数据文件后)是否立即刷新磁盘,默认为“0”表示关闭,刷新时机有操作系统决定;如果你的数据库保存的数据非常重要,可以开启此值(值为1)。

    12、interactive_timeout:链接空闲的最长时间,单位“秒”,默认为28800(即8个小时);通常链接有客户端关闭,我们可以不用调整此值。

 

    13、key_buffer_size:MyISAM引擎中,内存中缓存索引的最大尺寸,单位“字节”,默认为8M;如果你的系统由较多的MyISAM表,且建立了索引,你可以通常增加此值来提高读取性能。

 

    14、lock_wait_timeout:尝试获取metadata锁时等待的最长时间,比如DDL操作,或者在DML语句中使用“LOCK TABLES”、“FLUSH TABLES WITH READ LOCK”等。单位“秒”。

    15、log_error:错误日志的文件名。

    16、log_output:可选值为“FILE”、“TABLE”,表示日志输出在哪里。

    17、long_query_time:如果一个query耗时超过此值,将被认定为“慢查询”,SQL语句将会被写入到慢查询log中。单位“秒”,默认值为10,通常这个值有些小,我们可以适度增加此值。

 

    18、lower_case_table_names:表名是否是大小写敏感的,默认为“0”表示区分大小写,“1”表示表名将以小写方式保存且在比较时大小写不敏感,“2”表示表名原样保存但是比较时不区分大小写。因为表名的大小写经常会带来麻烦,建议使用“1”或者“2”。

 

    19、max_allowed_packet:server与client单此交互所能接收、发送的最大数据集,单位“字节”,默认为4M。

    20、max_connections:所能支撑的最大连接数,默认为151,如果超过此值,将会拒绝链接且反馈“Too many connections”错误,对于production环境,此值显然有些小,建议修改为“65535”等,server所能支撑的最大连接数仍受限于本地系统最大文件描述符的个数,可以通过“ulimit”等方式调整。

 

    21、max_relay_log_size:原理基本同“max_binlog_size”,默认为“0”表示relay log的大小由“max_binlog_size”参数控制。单位“字节数”。

    22、preload_buffer_size:索引文件预加载到内存的大小,默认为32K,单位“字节”;建议增大此值。

    23、relay_log_purge:是否开启relay log自动清除功能,默认为“1”表示开启。

    24、report_host:在replication模式中,slave向master注册时告知的host名称,此值通常为slave的ip地址(建议与bind_address保持一致),仅供展示。

    25、report_port:通上,此值与port保持一致,仅供展示。

    26、report_user:replicaiton的用户名,此值可以不需要与实际使用的replication用户名一致,仅供展示。(在master上使用“SHOW SLAVE HOSTS”查看)

    27、rpl_semi_sync_master_enabled:是否在master上开启“半同步”replication特性,默认为“0”表示关闭;如果replicaiton集群中需要采用半同步机制,那么master上必须开启。(需要安装semisync_master插件)

    28、rpl_semi_sync_master_timeout:在半同步模式中,master将变更操作提交给“半同步”slave后,等待响应的最长时间,默认为10000,单位“毫秒”;如果超时,此master与此slave将转换成“异步”replication,直到此slave再次跟进为止。(需要安装semisync_master插件)

 

    29、rpl_semi_sync_master_wait_no_slave:在timeout期间,所有的slave都离线时,master是否继续等待,默认为“1”表示继续等待,“0”表示master不再等待,转换成异步replication模式。(需要安装semisync_master插件)

    39、rpl_semi_sync_slave_enabled:是否在slave上开启半同步模式,默认为“0”表示关闭。(需要安装semisync_slave插件)

    31、slow_query_log:是否开启“慢查询”日志功能,配合“long_query_time”参数。

    32、slow_query_log_file:指定慢查询日志文件的名称,默认为“<hostname>--slow.log”。

    33、socket:指定socket文件的路径和文件名,即unix socket file。

    35、thread_pool_size:5.6新增参数,用于设定线程池的大小,默认为16,最大不得超过64;线程池中的线程用户并行的接收和执行客户端的SQL语句,合适的线程池大小对性能有很大的提升。(5.7中移除了此选项)

 

    36、tx_isolation:事务的隔离级别,默认值为“REPEATABLE-READ”。(此参数为系统变量,不能在配置文件中声明)

    37、innodb_buffer_pool_size:innodb用缓存数据和索引的内存大小,默认为128M,单位“字节”,通常设定为内存总量的20%~80%之间。

    38、innodb_commit_concurrency:innodb允许多少个线程并发的提交事务,默认为“0”表示不限制线程并发数,允许的最大值为1000。(针对整个innodb层)

 

    39、innodb_thread_concurrency:innodb允许的最大并发线程数,默认为“0”表示不限制,最大值不得超过1000;如果并发线程数到达限定值,其他线程将会被加入等待队列,正在等待lock的线程不计为并发线程数。如果你要修改此值,需要经过测试和性能对比才能决定,如果你无法断定,可以将此值暂且设定为CPU的核数或者保持默认值。(针对整个innodb层)

 

    40、innodb_concurrency_tickets:innodb线程持有的tickets数量,默认值为5000。如果并发数达到上限,后续线程将会被添加到等待队列中(由innodb_thread_concurrency控制);当线程被允许进入innodb层后,会给此线程分配“innodb_concurrency_tickets”个tickets,线程可以自由进入innodb层直到tickets消耗完毕(进入即消耗),此后线程需要重新进行并发检查(innodb_thread_concurrency),有可能重新进入队列等待。

    较小的innodb_concurrency_tickets,对于只处理较少个操作的小事务影响不大,如果一个事务中需要多个操作,那么它需要多次访问innodb层,有可能会耗尽tickets,进而需要多次进行并发检查,这将导致事务的处理时间较长;如果你要减小此值,需要慎重考虑。

 

    41、innodb_doublewrite:是否开启“双写”特性,默认为“1”表示开启;双写就是数据变更首先写入“buffer”,然后再写入实际的数据文件(data files),可以提高数据完整性;不建议关闭!

 

    42、innodb_file_per_table:是否将不同的innodb表数据(数据和索引)保存在各自的.ibd文件中,而不是保存在系统表空间中;它的优点就是,当table被drop或者truncate时,此表的存储空间可以被回收;在5.6.6+版本之后,默认为“1”表示开启,此前版本默认为关闭。当关闭此特性时,InnoDB将所有的表和索引保存在系统表空间的idb文件中,这种存储方式对处理“drop”和“truncate”表时性能较低,因为删除表数据不会导致innodb数据文件的收缩,毕竟所有的innodb表共享底层存储文件空间。

 

    43、innodb_flush_log_at_timeout:默认值为1,单位“秒”,当“innodb_flush_log_at_trx_commit”值为0或者2时,表示binlog刷新的时间间隔。

 

    44、innodb_lock_wait_timeout:事务等待获取行锁的最长时间,默认为50,单位“秒”,一旦超时将会抛出timeout错误。这个参数不会应用在deadlock上,因为mysql有死锁检查,一旦发现死锁将立即回滚而不会等待。

    45、innodb_read_io_thread、innodb_write_io_thread:IO线程的个数,此值建议保持默认,如果你的系统是基于固态硬盘等更高速的存储设备,可以适当调大此值,默认值为4,最大为64。

    46、innodb_sort_buffer_size:排序时使用的内存量,默认为1m,单位“字节”,如果排序时内存需要量超过此值将会交换到文件中,对于线上环境,我们可以适度调大此值。

    47、innodb_support_xa:是否支持XA事务,默认为1表示支持。

 

十、单点部署配置文件样例

[mysqld]
#集群唯一ID
server_id=10
#绑定的IP地址,默认绑定所有网卡IP
#如果只希望本地网络访问,此值为“127.0.0.1”
#如果只希望局域网内访问,此值可以为局域网IP,例如“192.168.1.100”
#如果只希望外部网络访问,此值为其外网IP
bind_address=127.0.0.1
#绑定端口
port=3306
socket=/tmp/mysql.socket
#mysql的安装路径
basedir=/usr/local/mysql
#数据文件保存的目录
datadir=/data/mysql
#事务是否自动提交
autocommit=1
#字符集,为了避免乱码
character_set_server=utf8
collation_server=utf8_general_ci
#链接超时,单位“秒”
connect_timeout=30
#默认存储引擎
default_storage_engine=InnoDB
#每次写入操作执行后,是否立即刷新数据文件,默认为0
flush=1
#MyISAM索引内存大小,默认为8m
#线上环境,如果有大量MyISAM表和索引,建议根据物理内存量适度调大此值
key_buffer_size=128M
#批量insert中支持的最大缓存
bulk_insert_buffer_size=8M
#获取metadata锁的最长等到时间,DDL
#lock_wait_timeout=3600
#query耗时超过此值,将被认定为慢查询,默认10,单位“秒”
long_query_time=10
slow_query_log=1
#slow_query_log_file=slow-bin
#表名是否大小写敏感
lower_case_table_names=1
max_allowed_packet=16M
##支撑的最大连接数,默认为151
max_connections=65535
##relay log是否开启自动清除
join_buffer_size=128M
sort_buffer_size=4M
read_rnd_buffer_size=2M 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

#innodb 参数
##innodb存储索引的内存量,默认为128M,单位“字节”
##如果环境中有大量innodb表和索引,
##建议根据内存总量适量调整此值,比如内存总量的20%~80%
innodb_buffer_pool_size=128M
##innodb允许事务并发提交的线程数,默认为0表示不限制
innodb_commit_concurrency=0
#innodb允许的最大并发线程池数(读、写)
innodb_thread_concurrency=64
innodb_concurrency_tickets=5000
#是否开启双写特性,默认1表示开启
innodb_doublewrite=1
innodb_file_per_table=1
#innodb事务提交与binlog刷新时机
innodb_flush_log_at_trx_commit=1
#上述值不为1时,此值控制间歇性刷盘的时间间隔
innodb_flush_log_at_timeout=1
#sort操作使用的内存,超过此值将会交换到文件中
innodb_sort_buffer_size=4M
#是否支持xa事务
innodb_support_xa=1

#binlog与replication,如下配置在单点模式下,也应配置
log_bin=my-binlog
binlog_checksum=CRC32
binlog_format=MIXED
sync_binlog=1
binlog_row_image=FULL
##slave上是否将执行的变更操作写入binlog
##如果slave是其他slave的master,需要开启
log_slave_updates=0
max_binlog_size=2G
binlog_order_commits=1
##binlog保存的时间,单位“天”
##自动删除早期的binlog文件
expire_logs_days=180
#开启GTID,强烈建议开启
gtid_mode=ON
enforce_gtid_consistency=ON

 

十一、Replication配置文件样例

#replication模式下选项
relay_log_purge=1
##当前实例的IP地址
report_host=192.168.1.100
##当前实例的端口
report_port=3306
##replication的用户账号名
report_user=rpl_sys
##slave上是否将执行的变更操作写入binlog
log_slave_updates=0
master_verify_checksum=1
relay_log=relay-bin
relay_log_info_repository=TABLE
sync_relay_log=1
master_info_repository=TABLE
#slave与master链接超时时间
slave_net_timeout=3600
##建议为database个数 + 1,或者简单为2
slave_parallel_workers=2
slave_sql_verify_checksum=1
##semisync配置需要首先安装“semisync_master”、“semisync_slave”才行
#rpl_semi_sync_master_enabled=1
#半同步,master等待slave确认消息的时间,单位“毫秒”
#rpl_semi_sync_master_timeout=10000
##当所有的半同步slave都离线时,master是否继续等待直到超时才转换成异步复制
#rpl_semi_sync_master_wait_no_slave=0
#rpl_semi_sync_slave_enabled=1

 

十二、MySQL安装部署简述(单点部署,非replication)

    1、本示例中使用压缩归档文件部署,下载任意版本tar.gz文件即可。(本例使用5.7.10)

    2、解压文件,并将文件拷贝到“/usr/local/mysql”目录下。

    3、然后在环境变量中增加MYSQL_HOME参数:

#/etc/profile
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH

 

    4、我们将mysql的实际数据保存在“/data/mysql”目录下,此目录需要有当前操作用户的读写权限。

    5、将上述“单点部署配置文件示例”内容copy到配置文件中,名为“my.cnf”,文件的部分内容可以根据实际情况调整,此文件放置在安装目录下。需要注意,只有当前用户具有my.cnf文件的读取权限,否则将会在启动时抛出如下警告,而导致文件配置被忽略:

Warning: World-writable config file 'my.cnf' is ignored

 

    可以修改读取权限:“sudo chmod 644 my.cnf”。

    6、初始化mysql系统:

>sudo ./mysqld --datadir=/data/mysql --initialize --user=mysql

    此处的datadir需要与配置文件中的“datadir”保持一致,此后将会在此目录下生成mysql必要的系统数据,--user表示生成的文件使用的系统用户名,即使没有创建“mysql”系统用户也不会带来问题。

    7、启动mysql

>sudo ./mysqld_safe --defaults-file ../my.cnf --skip-grant-tables &

    首次启动,我们可以使用“--skip-grant-tables”,此参数表示访问database将不需要授权认证,我们可以不适用密码就能访问mysql,以便我们稍后修改root密码。

 

    8、访问mysql:

>sudo ./mysql --host=127.0.0.1 --port 3306 

 

    9、初始化root密码:在不同的版本中,初始root密码的方式有很大差异,5.7版本我们可以这么做:

>use mysql;
>UPDATE user SET authentication_string = PASSWORD('new-password'),
password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';
>FLUSH PRIVILEGES;

 

    10、关闭mysql并重新启动,但是此处将不再使用“--skip-grant-tables”因为我们需要密码授权才能访问系统,而且root用户已经初始化了,我们可以创建其他用户并授权。

>./mysqladmin --host=127.0.0.1 --port=3306 -u root --password=new-password shutdown;
>./mysqld_safe --defaults-file=../my.cnf &
##重新访问数据则需要密码
>./mysql --host=127.0.0.1 --port=3306 -u root --pasword=new-password

 

    11、新增mysql用户与授权

>use mysql;
#新增一个普通用户,可以操作mydb这个数据库的所有数据
>CREATE DATABASE mydb;
>GRANT ALL ON mydb.* TO 'test'@'%' IDENTIFIED BY 'test';
#新增一个rpl_sys,用于在replication模式中可以复制binlog数据
>GRANT REPLICATION SLAVE ON *.* TO 'rpl_sys'@'%' IDENTIFIED BY 'rpl_password';
>FLUSH PRIVILEGES;

##无论如何“mysql”这个系统数据库总是在replication时被ignore,因为这个数据库保存了很多当前instance的系统运行状态数据,因此它不能被replication到slaves中,所以用户权限需要在每个slaves上也要单独执行一次,否则会影响failover和replication。

 

【上一篇:MySQL Replication原理】

【下一篇:MySQL Replication环境构建与运维】

参考:

1、http://dev.mysql.com/doc/refman/5.6/en/replication-options-slave.html

2、http://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html

3、http://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html

4、http://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html

MySQL Group Replication 安装 MySQL Group Replication 安装 192.168.10.65 192.168.10.66 192.168.10.67 OS : CentOS 7.4 mysql soft : 8.0.12 一、安装MySQL,并创建实例 此处参考 mysql8.0.12源码安装 二、mgr几个指定参数,添加到配置文件中,重启生效 – 配置文件 binlog_format ... 阅读详情

相关推荐

mysql驱动协议之loadbalance和replication

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33754065的博客 2253

Mysql刨根问底之五(数据复制)

它的实现机制可以这样概括,首先在源服务器(source server)上,任何数据修改和数据结构变更的事件(event)都会被写入日志文件 中,然后,副本服务器从源服务器上的日志文件中读取这些事件并在本地重放执行。这样的好处,减少了事务数据丢失的概率,而对底层硬件的IO要求也没有那么高(log buffer写到文件系统中,一般只是从log buffer的内存转移的文件系统的内存缓存中,对底层IO没有压力)。在这种模式下,事件的写入,默认使用基于语句的格式,仅在需要时才切换到基于行的格式。

qq_24872115的博客 735

python监控mysql-binlog: mysql-replication

python监控mysql-binlog: mysql-replication 准备mysql账号 准备一个mysql账号,要有SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限 GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'replicator'@'%' IDENTIFIED BY '123456'; # 刷新权限 flush privileges; binlog要满足以下条件 M

kamil的博客 1990

MySQL8.0使用mysqlsh配置主从复制 InnoDB ReplicaSet

InnoDB ReplicaSet InnoDB ReplicaSet 由一个主节点和多个从节点构成. 可以使用ReplicaSet对象和AdminAPI操作管理复制集, 例如检查InnoDB复制集的状态, 并在发生故障时手动故障转移到新的主服务器. 与InnoDB cluster类似, MySQL Router 支持针对InnoDB ReplicaSet 的引导, 这意味着可以自动配置MySQ...

IOsetting的专栏 849

易灵思FPGA-软件Efinity和Modelsim联仿设置

文章目录前言一、modelsim破解过程二、使用步骤1.引入库2.读入数据总结欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智

qq_35221855的博客 5362

新建菜单Office被替换为腾讯文档 - 解决方案

右键新建菜单中的Office被替换为腾讯文档。原因是安装了腾讯文档软件,此软件安装时会自动将新建菜单中的Office替换为腾讯文档,下文介绍解决方案。

NSJim的博客 2929

【MySQL 8.0】标准配置文件详解(下)

relay_log指定中继日志的名称默认基本名称是指定relay log的索引名称开启后,服务器启动后立即启用自动中继日志恢复。恢复过程创建一个新的中继日志文件,将 SQL(应用程序)线程位置初始化到这个新的中继日志,并将 I/O(接收方)线程初始化到应用程序线程位置。然后继续从源读取中继日志用于决定允许哪些事务在副本上并行执行的策略1.:基于复制源写入二进制日志的时间戳,事务在副本上并行应用2.DATABASE:更新不同数据库的事务是并行应用的。

weixin_44265650的博客 1037

联想X3650M5服务器双模式切换实战:UEFI与Legacy BIOS如何选择?

本文深入探讨了联想X3650 M5服务器在UEFI与Legacy BIOS启动模式间的选择策略。文章从技术原理、决策矩阵、实战切换步骤及后期验证等方面,为企业IT管理员提供了基于操作系统兼容性、存储架构、安全合规与运维习惯的完整决策框架,帮助其在数据中心硬件生命周期管理中做出明智选择。

weixin_29207533的博客 281

【MySQL精通之路】MySQL 8.0中添加、弃用或删除的服务器和状态变量及选项

欢迎大家关注专栏或者关注收藏我1.Mysql精通之路专栏: http://t.csdnimg.cn/4Rqp72.大家可以从这篇博客开始读,他是所有博客的根节点:【MySQL精通之路】详读MySQL8.0官方文档-优快云博客MySQL 8.0中添加了以下系统变量、状态变量和服务器选项。 MySQL 8.0中删除了以下系统变量、状态变量和选项。

Anakki的博客 1393

关于Selenium3在MicrosoftEdge浏览器中出现的问题

前言 最近在做web自动化测试,所用环境是java+selenium3.141.59+MicrosoftEdge(Chromium)浏览器。 在调试的过程中,出现了很多问题。比如selenium3在Edge浏览器中远程调用中,不支持addArguments方法等 问题 1.Edge浏览器弹窗问题 在测试过程中,会出现弹出窗提示 ...

zhucheng1994的博客 2196

最小二乘法(看完即会)

其中,X是数据矩阵,每一行是一个数据点,每一列是一个自变量(包括截距项),Y是观测值向量,β是待求的系数向量。为了找到使S最小的a和b的值,我们需要对S求关于a和b的偏导数,并令它们等于零。最小二乘法的数学公式通常用于线性回归问题,其中目标是找到一条直线(或更高维度的超平面),使得这条直线与给定数据点的误差平方和最小。同样地,通过求偏导数和令偏导数等于零,我们可以得到一个线性方程组,解这个方程组可以找到最优的b_0, b_1, …+ b_m*x_m,其中b_0是截距,b_1到b_m是各个自变量的系数。

qlkaicx的博客 2万+

Replication主要配置项

八、Replication主要配置项(配置文件) 1、log_bin:指定binlog文件的名称,同时也表示开启binlog功能,在replication模式下,master上必须开启log_bin,如果slave不需要failover,可以不开启。文件将会放置在“datadir”目录下。 2、binlog_checksum:是否开启binlog校验功能,在5.6.6+之后此值默...

zping的博客 86

JS逆向-Protobuf逆向解析

目录一、什么是Protobuf二、Protobuf环境配置三、Protobuf实例序列化与反序列化四、逆向解析 Protobuf案例1、python序列化2、python反序列化 一、什么是Protobuf 1、protocol buffers介绍:是一种语言无关、平台无关、可扩展的序列化结构数据的方法。严格说不算是加密,只能是叫序列化结构数据,让可读变为疑似的乱码,那反序列化即让疑似的乱码变为可读 2、protobuf使用流程的前提是有一个.proto文件,对逆向而言就是还原.proto文件,选择

十一姐的博客 1万+

mysql授权replication_MySQL创建用户并授权REPLICATION CLIENT和REPLICATION SLAVE

一、创建用户CREATE USER ‘test‘@‘%‘ IDENTIFIED BY ‘test‘;FLUSH PRIVILEGES;二、授权REPLICATION CLIENT:授予此权限,复制用户可以使用 SHOW MASTER STATUS, SHOW SLAVE STATUS和 SHOW BINARY LOGS来确定复制状态。REPLICATION SLAVE:授予此权限,复制才能真正工作...

weixin_33664951的博客 1956

Flink Web UI 如何使用和调试保姆级教程(持续更新)

Running Jobs(运行中的作业):显示正在运行的所有 Flink 作业的列表。每个作业都有一个独特的 Job ID,可以点击进入查看作业的详细信息。Completed Jobs(已完成的作业):显示已经完成或取消的作业列表。:显示当前集群中所有 TaskManager 的健康状态,包括 CPU 使用率、内存使用情况、Slot 数量等。Job Manager Configuration(JobManager 配置):显示 JobManager 的一些配置参数,帮助调试和优化 Flink 集群。

大模型大数据攻城狮的专栏 3990

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

MySQL Group Replication-现有普通复制集群提升为Group Replication

上一篇测试了各种场景下,向Group Replication中添加新节点。那么,如果原来有一套master-slave集群,需要怎么把它改造成Group Replication集群呢?Group Replication是基于GTID来复制的,那么第一步就是需要将普通复制改造成GTID复制。有了GTID那么将Master-Slave结构改造成Group Replication就很方便了。搭建普通复制环

hubo890224的专栏 4222

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

mysql的replication_如何配制MySql的Replication

1.建立专门用于Replication的账户首先Replication操作会涉及到的两个重要权限,这里先做一下说明:The REPLICATION CLIENT privilege enables the use of SHOW MASTER STATUS and SHOW SLAVE STATUS.REPLICATION CLIENT 使得用户可以使用SHOW MASTER STATUS和SH...

weixin_28748867的博客 437

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL Replication, 主从和双主配置

以下内容总结的不错,虽然还不是足够深入. 待整理细化. MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster,但因

Edwin’s Blog 2000

mysql replication

同步进程 每一组mysql同步(一个组节点一个从节点)主要由3个进程实现,其中一个进程在主节点上创建,两个进程在从节点上创建 Binlog dump thread 这个是主节点创建的进程,用于当从节点连接上主节点后向从节点发送binary log。可以通过在mysql命令行执行SHOW PROCESSLIST语句,显示结果中Binlog dump thread就代表的Binlog dump thread进程运行状态 Replication I/O thread 从节点start slave(开启同步)时,从

weixin_45786742的博客 442

Python:mysql-replication监控MySQL的binlog变动

Github: https://github.com/noplay/python-mysql-replication 安装 pip install mysql-replication 代码示例 # -*- coding: utf-8 -*- import datetime import json from pymysqlreplication import BinLogStreamReade...

彭世瑜的博客 5899

mysql replication 协议_深入解析MySQL replication协议

Why最开始的时候,go-mysql只是简单的抽象mixer的代码,提供一个基本的mysql driver以及proxy framework,但做到后面,笔者突然觉得,既然研究了这么久mysql client/server protocol,干脆顺带把replication protocol也给弄明白算了。现在想想,幸好当初决定实现了replication的支持,不然后续go-mysql-elas...

weixin_35414484的博客 982

mysql中的replication_Mysql之replication初探

MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster,但因为比较复杂,使用者较少。下图是MySQL官方给出了使用Replication的场景:Replication原理Mysql 的 Replication 是一个异步的复制过程,从一个MySQL...

weixin_35645652的博客 500

深入了解MySQL replication

深入了解MySQL replication 1. 简介 本文主要讲解MySQL的replication协议的过程和如何通过伪造客户端与Server通信,获取Binlog日志以及部分重点日志的解析,并对比了不同Binlog类型的优缺点 2. Replication过程 2.1 复制方案 MySQL的Master主服务器将数据的改动记录到本地的Binlog中 MySQL的Slave从服务器中的I/O...

Tommenx的博客 611

MySQL Group Replication原理及搭建

1. MGR简介 1.1 MGR介绍 MGR全称MySQL Group Replication(mysql 组复制),是MySQL官方于2016年推出的一个全新的高可用扩展解决方案。是一种基于paxos协议的状态机复制,在MGR出现以前,都是以master-slave架构出现的,mysql5.7版本开始支持无损半同步复制(lossless semi-sync replication),从而进一步提升数据的强一致性。 MGR由若干个节点共同组成一个复制组,一个事务提交,必须经过组内大多数节点(N/2+1)决议

jiaona_chen123的博客 7088
上一篇: Mysql Replication基本原理(一)
下一篇: Mysql Replication运维与实施(三)
iteye_19607
博客等级 码龄8年 34粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值