Replication and binary logging happen independently from innodb, which can unfortunately cause problems.
Check out: http://dev.mysql.com/doc/refman/5.5/en/replication-options-binary-log.html#sysvar_sync_binlog
From what you describe I suspect that sync_binlog is set to 0 for your servers. Leaving it at 0 means mysql will rely upon the filesystem to handle flushing to disk. Effectively this means that the binlog data will often be in the filesystem cache. That gets flushed to disk by the kernel at some interval, but in the case of a power failure anything in there is lost.
Setting sync_binlog to 1 will force mysql to flush the binlog event to the filesystem using fdatasync after every commit. This is safer (since you will lose 1 transaction at most in case of power failure), but creates a lot more disk activity. Benchmark and see what the impact is for your workload. Knowing the tradeoffs for both scenarios will hopefully help you make an informed decision.
Hope that helps.
First of all, your PRIMARY KEY depends on the logical nature of your data and will be indexed automatically by the DBMS. If the PK happens to be composite, it will automatically generate a composite index underneath it. The same goes for UNIQUE constraints and FOREIGN KEYs.
On top of that, under InnoDB, PK also acts as a clustered index.
As for the non-key fields, index based on the expected queries. Assuming your table T has several fields: A, B, C, D (etc.), for a query such as...
SELECT * FROM T WHERE A = '...' AND B = '...'
...create a composite index on {A, B} (or {B, A}), but not on C, D etc.
For the...
SELECT * FROM YOUR_TABLE WHERE A = '...' OR B = '...'
...you'll need a separate indexes on {A} and on {B}.
For both...
SELECT * FROM T WHERE A = '...' AND B = '...'
SELECT * FROM T WHERE A = '...' OR B = '...'
...you'll need indexes on {A, B} and {B} (or {B, A} and {A}).
For both...
SELECT * FROM T WHERE A = '...' AND B = '...'
SELECT * FROM T WHERE A = '...'
...you'll only need an index on {A, B}.
For...
SELECT * FROM T WHERE A = '...' ORDER BY B
...you'll need an index on {A, B}.
Etc, etc...
Do not create indexes that you don't need, since they incur a penalty in storage space and in INSERT/UPDATE/DELETE performance. For more on indexing (and other database performance considerations), I warmly recommend reading: Use The Index, Luke!
Best Answer
The file system is useful if you are looking for a particular file, as operating systems maintain a sort of index. However, the contents of a txt file won't be indexed, which is one of the main advantages of a database. Another is understanding the relational model, so that data doesn't need to be repeated over and over. Another is understanding types. If you have a txt file, you'll need to parse numbers, dates, etc.
So - the file system might work for you in some cases, but certainly not all.