Mysql主从搭建主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步; 根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的
Mysql主从搭建
主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步; 根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的表。
MySQL的工作方式是单进程多线程的方式,那么线程的多寡则会极大的影响到MySQL的效率,而在早期MySQL的主从都是由单线程进行的,使得主从复制除了相关的客观因素外还受到自身的影响;为此在MySQL的5.7版本中对多线程主从复制来进一步的改善,在MySQL 5.7中是按照逻辑时钟(类似CPU的处理机制)来处理多线程,甚至在半同步复制semisync中还是使用Performance Schema表来监控复制线程;
先卸载系统自带的mariadb数据库
yum -y remove mariadb*
Yum安装Percona
wget https://www.percona.com/downloads/Percona-Server-LATEST/Percona-Server-5.7.22-22/binary/redhat/7/x86_64/Percona-Server-server-57-5.7.22-22.1.el7.x86_64.rpm yum install -y Percona-Server-server-57-5.7.22-22.1.el7.x86_64.rpm
192.168.253.188(主库)配置文件
[client]default_character_set = utf8mb4socket=/var/lib/mysql/mysql.sock[mysqld]port=3306socket=/var/lib/mysql/mysql.sockbasedir = /data/local/percona5.7.22datadir = /data/local/percona5.7.22/datapid_file = /var/lib/mysql/mysql-pid.pidcharacter_set_server = utf8mb4default_storage_engine = InnoDBexplicit_defaults_for_timestampfederatedskip-name-resolvegtid-mode = ONenforce-gtid-consistency = ONlog-slave-updates = ON#Innodbinnodb_flush_method = O_DIRECTinnodb_log_files_in_group = 2innodb_lock_wait_timeout = 100innodb_log_file_size = 1024Minnodb_flush_log_at_trx_commit = 1innodb_file_per_table = 1innodb_thread_concurrency = 8innodb_buffer_pool_size = 5Ginnodb_read_io_threads = 24innodb_write_io_threads = 24log_bin_trust_function_creators=1innodb_page_cleaners=8innodb_lru_scan_depth=256innodb_locks_unsafe_for_binlog = 1innodb_autoinc_lock_mode = 2sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONgroup_concat_max_len = 18446744073709551615# MyISAM #key_buffer_size = 1344Mmyisam_recover_options = FORCE,BACKUPlower_case_table_names=1event_scheduler=1# SAFETY #max_allowed_packet = 1024Mmax_connect_errors = 1000000skip_name_resolve = 1# Binary Logging #server_id = 200log_bin = mysql-binbinlog_format = ROWsync_binlog = 1# CACHES AND LIMITS #tmp_table_size = 32Mmax_heap_table_size = 32Mmax_connections = 1000thread_cache_size = 50open_files_limit = 65535table_definition_cache = 4096table_open_cache = 5000# LOGGING #log_error = /data/logs/mysql/mysql-error.loglog_queries_not_using_indexes = 0slow_query_log = 1long_query_time = 1slow_query_log_file = /data/logs/mysql/mysql-slow.log# REPLICATION #relay_log = relay-binslave_net_timeout = 60symbolic-links = 0transaction_isolation = READ-COMMITTED [mysql]no-auto-rehashdefault_character_set = utf8mb4[xtrabackup]default-character-set = utf8mb4
192.168.253.189(从库,190从库也是一样配置)配置文件
[client]default_character_set = utf8mb4socket=/var/lib/mysql/mysql.sock[mysqld]port=3306socket=/var/lib/mysql/mysql.sockbasedir = /data/local/percona5.7.22datadir = /data/local/percona5.7.22/datapid_file = /var/lib/mysql/mysql-pid.pidcharacter_set_server = utf8mb4default_storage_engine = InnoDBexplicit_defaults_for_timestampfederatedskip-name-resolvegtid-mode = ONenforce-gtid-consistency = ONlog-slave-updates = ONslave_type_conversions="ALL_NON_LOSSY"#Innodbinnodb_flush_method = O_DIRECTinnodb_log_files_in_group = 2innodb_lock_wait_timeout = 100innodb_log_file_size = 1024Minnodb_flush_log_at_trx_commit = 1innodb_file_per_table = 1innodb_thread_concurrency = 8innodb_buffer_pool_size = 5Ginnodb_read_io_threads = 24innodb_write_io_threads = 24log_bin_trust_function_creators=1innodb_page_cleaners=4innodb_lru_scan_depth=256innodb_buffer_pool_instances=2innodb_locks_unsafe_for_binlog = 1innodb_autoinc_lock_mode = 2sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIONgroup_concat_max_len = 18446744073709551615# MyISAM #key_buffer_size = 1344Mmyisam_recover_options = FORCE,BACKUPlower_case_table_names=1event_scheduler=1slave_pending_jobs_size_max = 1344M# SAFETY #max_allowed_packet = 512Mmax_connect_errors = 1000000skip_name_resolve = 1slave-skip-errors=1007,1008,1032,1062# Binary Logging #server_id = 201log_bin = mysql-binbinlog_format = ROWsync_binlog = 1# CACHES AND LIMITS #tmp_table_size = 32Mmax_heap_table_size = 32Mmax_connections = 1000thread_cache_size = 50open_files_limit = 65535table_definition_cache = 4096table_open_cache = 5000# LOGGING #log_error = /data/logs/mysql/mysql-error.loglog_queries_not_using_indexes = 0slow_query_log = 1long_query_time = 1slow_query_log_file = /data/logs/mysql/mysql-slow.log# REPLICATION #relay_log = relay-binslave_net_timeout = 60symbolic-links = 0# slaveslave-parallel-type=LOGICAL_CLOCKslave-parallel-workers=16master_info_repository=TABLErelay_log_info_repository=TABLErelay_log_recovery=ON[mysql]no-auto-rehashdefault_character_set = utf8mb4[xtrabackup]default-character-set = utf8mb4
server_id三台数据库要设置成不同
启动mysql
systemctl start mysql.service
查询初始化密码
grep "password" /var/log/mysqld.log
修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
使用Atlas实现读写分离
环境安装
yum -y install libevent glib2 lua gcc gcc-c++ autoconf mysql-devel libtool pkgconfig ncurses ncurses-devel libevent-devel
下载Atlas包
wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
安装atlas
yum install Atlas-2.2.1.el6.x86_64.rpm -y
#ll /usr/local/mysql-proxy/total 4-rw-r--r-- 1 root root 402 Sep 11 14:59 /drwxr-xr-x 2 root root 75 Sep 10 14:24 bindrwxr-xr-x 2 root root 22 Sep 11 14:59 confdrwxr-xr-x 3 root root 331 Sep 10 14:14 libdrwxr-xr-x 2 root root 58 Sep 11 14:59 log
bin目录下放的都是可执行文件
- “encrypt”是用来生成MySQL密码加密的,在配置的时候会用到
- “mysql-proxy”是MySQL自己的读写分离代理
- “mysql-proxyd”是360弄出来的,后面有个“d”,服务的启动、重启、停止。都是用他来执行的
- conf目录下放的是配置文件
“test.cnf”只有一个文件,用来配置代理的,可以使用vim来编辑
lib目录下放的是一些包,以及Atlas的依赖
log目录下放的是日志,如报错等错误信息的记录
使用encrypt来对数据库的密码进行加密,账号:aadminproxy,密码:123456
/usr/local/mysql-proxy/bin/encrypt 123456XXfVpJOzMdITLHv26rAgv
配置atlas
vim /usr/local/mysql-proxy/conf/test.cnf[mysql-proxy]admin-username = rootadmin-password = admin123proxy-backend-addresses = 192.168.253.188:3306proxy-read-only-backend-addresses = 192.168.253.189:3306@1,192.168.253.190:3306@2pwds = aadminproxy:XXfVpJOzMdITLHv26rAgvdaemon = truekeepalive = trueevent-threads = 8log-level = messagelog-path = /usr/local/mysql-proxy/logsql-log=ONproxy-address = 0.0.0.0:8066admin-address = 0.0.0.0:2345charset=utf8
启动
/usr/local/mysql-proxy/bin/mysql-proxyd test start
更新有趣IT资讯,干货,关注下面公众号吧,互联网爱好者必备公众号