mysql主从配置,这个是我在线上的配置,涉及到公司资源的我就随便输入,如IP,user,passwd等~

  主服务器
  1 .修改配置文件,添加2行 //  最后有附带公司的my.cnf配置。
  vi /etc/my.cnf
  log-bin=mysql-bin   //必须打开,从库是根据bin的二进制文件来读取主库操作记录。
  server-id = 1          //这个必须唯一,一般我都配置成IP最后一位
  主:
  需要同步的数据
  binlog-do-db=DB1
  binlog-do-db=DB2
  不同步的数据库
  binlog-ignore-db=mysql=DB3
  binlog-ignore-db=mysql=DB4
  从:
  不同步的数据库
  replicate-ignore-db=DB5
  --------
  /usr/local/mysql/bin/mysqladmin shutdown         //关闭数据库
  /usr/local/mysql/bin/mysqld-safe --user=mysql &  重启mysql使修改的my.cnf生效。
  2 .增加从库连接权限
  GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.3.%' IDENTIFIED BY 'likunshan';
  3 .主库锁,取偏移值,解除锁表
  flush tables with read lock;
  show master status;     (这里取得File和Positioon的值)
  +------------------+----------+--------------+------------------+
  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+--------------+------------------+
  | mysql-bin.000007 |       98 |              | mysql  |
  +------------------+----------+--------------+------------------+
  备份数据库,可以用mysqldump或者直接拷贝数据库文件比较快)
  unlock tables;  //数据库解锁。
  从库配置:
  1 .修改配置文件,添加2行
  vi /etc/my.cnf
  log-bin=mysql-bin (单纯从库可以不开,如果从机还有做为某台机的主库,要开)
  server-id = 2   //这个必须唯一,一般我都配置成IP最后一位
  --------
  /usr/local/mysql/bin/mysqladmin shutdown
  /usr/local/mysql/bin/mysqld-safe --user=mysql --skip-slave-start &       重启mysql生效
  2 .设置
  CHANGE MASTER TO MASTER_HOST='192.168.3.1',MASTER_USER='user',MASTER_PASSWORD='likunshan',MASTER_LOG_FILE='mysql-bin.000008',MASTER_LOG_POS=98;
  /*
  说明:MASTER_HOST='主库IP'
  MASTER_USER='数据库连接账号'
  MASTER_PASSWORD='连接密码'
  MASTER_LOG_FILE='主库上取得的File'
  MASTER_LOG_POS=主库上取得的Positioon的值
  */
  启动 slave线程
  start slave;
  查看线程情况
  show slave status\G
  看到以下2个yes表示成功,没有的话,检查从主库那得到的有没有正确,主从的IP连接有没有正常。重复第2步。
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  3 .测试
  往主库那create tables ;
  CREATE TABLE `test_user` (
  `uid` int(11)
  );
  看看从库那有没有也生成,理论上是可以的。
  ---------------------------------------------------------
  维护:
  启动时候增加
  --slave-skip-erroes=[ err_code1,err_code2,all] 可以跳过错误信息继续执行
  如果主库更新太快导致从库由于各种原因无法及时同步到,可以强制主从数据库同步,说白了,就是把主数据库锁表,禁止写入,等待从库同步完毕
  主库:
  flush tables with read lock;
  show master status;  (这里取得File和Positioon的值)
  假设获取的为mysql-bin.000008 和 544
  从库:
  select master_pos_wait('mysql-bin.000008','544');
  返回0表示同步完成,-1表示超时
  同步完成后,主库:
  unlock tables;
  ---------------------------------------------------------------------
  主从切换问题:假设 主库M1 从库S1   S2
  1 所有从库:
  stop slave io_thread;
  检查状态:show processlist; 直到看到has read all relay log (表示更新执行完毕)
  2 在从库上选一台做为新的主库S1,执行:
  stop slave;
  reset master;
  3 在S2执行以后操作让其去同步新的主库
  stop slave io_thread;
  stop slave;
  CHANGE MASTER TO MASTER_HOST='192.168.41.156'; ( 注意,数据库权限必须已经添加)
  4.删除新的主库数据库文件var中的master.info   relay-log.info
  5.修改程序指向的数据库IP ,这里用虚拟IP直接绑定到新的主库比较快
  /usr/local/mysql/bin/mysqld-safe --user=mysql --skip-slave-start & 表示启动的时候不开启同步
  额外话题:
  初始化数据库:
  删除数据库文件 rm -rf /usr/local/mysql/var/*
  初始化 /usr/local/mysql/bin/mysql_install_db --user=mysql
  以下为公司一对外开放的my.cnf  我的不一定是正确的,如果有配置不合理的地方,欢迎留言修正,谢谢。
  配置:
  品牌:戴尔
  CPU:E5606  @ 2.13GHz    8核
  内存:16G
  cat  /etc/my.cnf
  [client]
  port            = 3306
  socket          = /tmp/mysql.sock
  [mysqld]
  skip-name-resolve
  max_connections=1024
  max_connect_errors=50000
  wait_timeout=29
  interactive_timeout=10
  long_query_time = 3
  log-slow-queries=/tmp/slow_log
  port            = 3306
  socket          = /tmp/mysql.sock
  skip-locking
  key_buffer = 512M
  max_allowed_packet = 16M
  max_heap_table_size = 128M
  table_cache = 1024
  sort_buffer_size = 8M
  read_buffer_size = 8M
  net_buffer_length = 8K
  read_rnd_buffer_size = 32M
  myisam_sort_buffer_size = 128M
  join_buffer_size=8M
  bulk_insert_buffer_size=128M
  back_log        = 200
  concurrent_insert =2
  thread_cache_size = 120
  query_cache_size = 512M
  thread_concurrency = 4
  character-set-server=utf8
  tmp_table_size = 256M
  table_lock_wait_timeout=20
  expire_logs_days=3
  #binlog_format = mixed
  max-binlog-size=128M
  binlog_cache_size = 4M
  skip-slave-start = 1
  binlog-do-db = test_db
  log-bin=mysql-bin
  server-id  = 140
  innodb_file_per_table= 1
  innodb_buffer_pool_size = 10240M
  innodb_additional_mem_pool_size = 64M
  innodb_log_file_size = 1024M
  innodb_log_buffer_size = 16M
  innodb_flush_log_at_trx_commit = 0
  #innodb_adaptive_flushing = 1
  innodb_lock_wait_timeout = 20
  innodb_flush_method = 'O_DIRECT'
  transaction-isolation=READ-COMMITTED
  innodb_rollback_on_timeout = On
  innodb_data_file_path = ibdata1:300M:autoextend
  innodb_file_io_threads = 4
  innodb_thread_concurrency = 16
  innodb_log_files_in_group = 3
  innodb_max_dirty_pages_pct = 90
  innodb-open-file = 10240
  innodb_fast_shutdown = 1
  innodb_status_file=1
  innodb_autoextend_increment = 16M
  innodb_thread_concurrency = 1000
  memlock
  [mysqldump]
  quick
  max_allowed_packet = 16M
  [mysql]
  no-auto-rehash
  [isamchk]
  key_buffer = 256M
  sort_buffer_size = 256M
  read_buffer = 2M
  write_buffer = 2M
  [myisamchk]
  key_buffer = 256M
  sort_buffer_size = 256M
  read_buffer = 2M
  write_buffer = 2M
  [mysqlhotcopy]
  interactive-timeout